2015-07-28 86 views
0

我正在嘗試編寫一個函數,它創建一個二維輸入numpy數組的三維表面,具有X和X的行數和列數,以及數組中的值作爲Z值。我搜索關於SO用於3D繪圖的例子,並且適於進入下面的函數該示例(Plotting a 2d Array with mplot3d):二維數組到三維面積函數 - Python

def area_plot(a): 
    rows = range(a.shape[0]) 
    columns = range(a.shape[1]) 
    hf = plt.figure() 
    ha = hf.add_subplot(111, projection= "3d") 
    X, Y = np.mgrid(rows, columns) 
    ha.plot_surface(X,Y, arr) 
    plt.show() 

的實例陣列是這樣的:

arr = np.array([(1,1,1,2,2,3,2,2,1,1,1), 
       (1,1,1,2,3,3,3,2,1,1,1), 
       (1,1,1,2,3,10,3,2,1,1,1), 
       (1,1,1,2,3,3,3,2,1,1,1), 
       (1,1,1,2,2,3,2,2,1,1,1)]) 

area_plot(arr) 

但是我得到這個錯誤,我不知道如何解決它。謝謝!

TypeError: 'nd_grid' object is not callable

回答

1

看起來你沒有正確使用np.mgrid。見下文:

import matplotlib.pylab as plt 
import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 


def area_plot(a): 
    rows = range(a.shape[0]) 
    columns = range(a.shape[1]) 
    hf = plt.figure() 
    ha = hf.add_subplot(111, projection= "3d") 
    X, Y = np.mgrid[0: len(rows), 0:len(columns)] 
    ha.plot_surface(X,Y, a) 
    plt.show() 

arr = np.array([(1,1,1,2,2,3,2,2,1,1,1), 
       (1,1,1,2,3,3,3,2,1,1,1), 
       (1,1,1,2,3,10,3,2,1,1,1), 
       (1,1,1,2,3,3,3,2,1,1,1), 
       (1,1,1,2,2,3,2,2,1,1,1)]) 

area_plot(arr) 
+0

此代碼產生一個* ValueError異常:新的數組的總大小必須保持不變* –

+0

我得到這個錯誤消息:「ValueError異常:形狀不匹配:兩個或更多個陣列具有在軸線上0不相容的維度」 – Litwos

+0

剛剛更新了它,現在嘗試... – LRP