2015-01-12 38 views
2

我想繪製一個二維數組在3D與蟒蛇mplot3d但是我得到一個有關軸1上不兼容的尺寸的錯誤 我已經看過其他問題,其中答案已經建議使用meshgrid,但我已經使用它並仍然出現錯誤,我的X和Y範圍也乘以Z值的數量。 這裏是我的代碼:mplot3d python不兼容的尺寸錯誤

def view_3d(map3d): 
    fig = plt.figure() 
    ax = fig.gca(projection='3d') 
    X = [] 
    Y = [] 
    Z = [] 
    for wid in range(len(map3d)): 
     X.append(wid) 
     for hi in range(len(map3d[wid])): 
      if wid is 0: 
       Y.append(hi) 
      Z.append(map3d[wid][hi]) 
    print(len(X), len(Y), len(Z)) 
    X = np.array(X) 
    Y = np.array(Y) 

    X2, Y2 = np.meshgrid(X, Y) 
    Z = np.array(Z) 
    print(len(X2),len(Y2),len(Z)) 
    print(len(X2[0]), len(Y2[0])) 
    surf = ax.plot_surface(X2, Y2, Z, rstride=1, cstride=1, cmap=cm.coolwarm, 
      linewidth=0, antialiased=False) 

    ax.zaxis.set_major_locator(LinearLocator(10)) 
    ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) 

    fig.colorbar(surf, shrink=0.5, aspect=5) 

    plt.show() 

傳遞的二維數組(map3d的)有566按566

報表的打印長度爲只是爲了確認陣列

錯誤的長度是:

Traceback (most recent call last): 
    File "__init__.py", line 199, in <module> 
    view_3d(map_results) 
    File "__init__.py", line 163, in view_3d 
    linewidth=0, antialiased=False) 
    File "C:\Python27\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py", line 1564, in plot_surface 
    X, Y, Z = np.broadcast_arrays(X, Y, Z) 
    File "C:\Python27\lib\site-packages\numpy\lib\stride_tricks.py", line 101, in broadcast_arrays 
    "incompatible dimensions on axis %r." % (axis,)) 
ValueError: shape mismatch: two or more arrays have incompatible dimensions on axis 1. 

阿谷歌驅動連桿,以運行代碼和查看錯誤所需的代碼和圖像低於: https://drive.google.com/folderview?id=0B2ssDQewnhReWGJZYXZRSXNxRFU&usp=sharing

所有幫助表示讚賞,感謝

+0

請提供重現錯誤的數據。至少你可以提供錯誤信息。否則,將很難幫助你。 – hitzg

+0

我已經添加了一個代碼鏈接和發生的錯誤 – tht13

回答

1

Z陣列必須擁有plot_surface工作相同的形狀X2,Y2。 所以我改了行

Z = np.array(Z) 

Z = np.array(Z).reshape(Y.size,X.size) 

和它的工作!