2D阵列到3D区域功能 - Python

时间:2015-07-28 09:40:49

标签: python arrays numpy 3d

我正在尝试编写一个创建2D输入numpy数组的3D表面的函数,其行数和列数为X和X,数组中的值为Z值。我在SO上搜索了3D图的示例,并将此示例(Plotting a 2d Array with mplot3d)改编为以下函数:

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'对象不可调用

1 个答案:

答案 0 :(得分: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)