2011-10-28 104 views
3

對,我有一個x值,y值和z值(我認爲我轉換爲數組?)的列表,但是我想要繪製曲面圖,但它不起作用。matplotlib 3d線框圖

這裏就是我想要做的,你可以忽略大部分的代碼,因爲它是相當無關 - 只要看看在那裏我有xdisydisdist以及到底哪裏我想我的ATM」曲線m到處ValueError異常:需要超過1的值來解壓:(幫助非常感謝

from math import * 
from numpy import * 
import pylab 
def sweep (v,p,q,r,s): 
    a=.98 

    for i in range (1, len(v)-1): 
     for j in range (1, len(v)-1): 
      c =0.0 

      if i==p and j==q: c =1.0 
      if i==r and j==s: c= -1.0 
      v[i,j]=(v[i -1,j]+v[i+1,j]+v[i,j -1]+v[i,j+1]+c-a*v[i,j])/(4-a) 

def main(): 
    from mpl_toolkits.mplot3d import Axes3D 
    from matplotlib import cm 
    from matplotlib.ticker import LinearLocator, FormatStrFormatter 
    import matplotlib.pyplot as plt 
    ydis=[] 
    xdis=[] 
    resis=[] 
    for j in range(2,18): 
     for i in range(2,18): 
      v= zeros ((20,20),float) 
      p=q=9 
      r=i 
      s=j 
      dv =1.0e10 
      lastdv =0 
      count =0 
      while (fabs(dv - lastdv)>1.0e-7*fabs(dv)): 
       lastdv =dv 
       sweep(v,p,q,r,s) 
       dv=v[p,q]-v[r,s] 
      resis.append(dv) 
      xdis.append(r-p) 
      ydis.append(s-q) 

    X=array(xdis) 
    Y=array(ydis) 
    Z=array(resis) 
    fig = plt.figure() 
    ax = fig.add_subplot(111, projection='3d') 
    ax.plot_wireframe(X,Y,Z) 
    plt.show() 
main() 

回答

3

plot_wireframe需要三個二維數組(X,Y,Z)作爲輸入,所以,

後:

X=np.array(xdis) 
Y=np.array(ydis) 
Z=np.array(resis) 

地址:

X=X.reshape((-1,16)) 
Y=Y.reshape((-1,16)) 
Z=Z.reshape((-1,16))   
0

看起來像「掃」功能改變「v」所以你得到一個空列表它沒有。