我在 Matplotlib 上绘图已有一段时间,并注意到某些绘图技术(如 3D 绘图和其他绘图技术)要求数据存在于维度超过 1D 的数组中。例如,如果我有 1D 数组 X、Y、Z,那么我将无法在 3D 图中绘制它们。但是,如果我将相同的数组重塑为 2D 或任何 ND,然后我可以将它们绘制为 3D。我的问题是,你认为为什么会发生这种情况?更重要的是,重塑和一维数组(就其数据而言)之间是否存在差异?
问问题
444 次
1 回答
1
让我们调查一下ax.contour
。文档中有一个示例:
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X, Y, Z = axes3d.get_test_data(0.05)
print(X.shape, Y.shape, Z.shape)
# ((120, 120), (120, 120), (120, 120))
cset = ax.contour(X, Y, Z)
ax.clabel(cset, fontsize=9, inline=1)
plt.show()
print 语句显示ax.contour
可以接受 2D 输入。如果我们要将X
andY
数组更改为一维数组:
X, Y, Z = axes3d.get_test_data(0.05)
X = X.reshape(-1)
Y = Y.reshape(-1)
print(X.shape, Y.shape, Z.shape)
然后我们得到
((14400,), (14400,), (120, 120))
作为形状,并且 aTypeError
被提出:
TypeError: Length of x must be number of columns in z,
and length of y must be number of rows.
所以看来别无选择。ax.contour
需要二维数组。
于 2012-11-08T22:05:05.140 回答