0

我在 Matplotlib 上绘图已有一段时间,并注意到某些绘图技术(如 3D 绘图和其他绘图技术)要求数据存在于维度超过 1D 的数组中。例如,如果我有 1D 数组 X、Y、Z,那么我将无法在 3D 图中绘制它们。但是,如果我将相同的数组重塑为 2D 或任何 ND,然后我可以将它们绘制为 3D。我的问题是,你认为为什么会发生这种情况?更重要的是,重塑和一维数组(就其数据而言)之间是否存在差异?

4

1 回答 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 输入。如果我们要将XandY数组更改为一维数组:

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 回答