2015-07-28 90 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