matplotlib 3d - 初学者水平

时间:2016-07-12 07:56:22

标签: python matplotlib

嗨我似乎无法用简单的坐标创建一个3d表示 - 我不想要这些行 - (每个不同于0的坐标表示应用在触摸屏上的手指)

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

X =[1,2,3,4,5,6,7,8,9,10]
Y =[5,6,2,3,13,4,1,2,4,8]
Z =[0,2,0,5,0,0,0,0,8,0]
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')

ax.plot_surface(X, Y, Z, rstride=10, cstride=10)

plt.show()

1 个答案:

答案 0 :(得分:1)

要执行plot_surface,您的输入数组(X,Y,Z)应为2D数组。 在你的情况下,你试图输入一维数组,这就是你的原因 运行你的代码只需要网格即可得到一个空图。

以下是您的代码的示例:

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

X =[1,2,3,4,5,6,7,8,9,10]
Y =[5,6,2,3,13,4,1,2,4,8]
Z =[0,2,0,5,0,0,0,0,8,0]

x_plot,y_plot = np.meshgrid(X,Y)
z_plot = x_plot**2 + x_plot**2

ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')

ax.plot_surface(x_plot,y_plot,z_plot)

plt.show()

在这里,我已经将2D数组作为输入给出了。我使用numpy.meshgrid制作了它们。 Z轴是任意值。这会产生:

enter image description here

正如其他人所建议的那样,你只需要3D散点图,在这种情况下只需使用

ax.scatter(X,Y,Z) 

你会得到

enter image description here