0

私はしばらくMatplotlibでプロットしてきましたが、3Dプロットなどのプロット手法や、1Dを超える次元の配列にデータが存在する必要があることに気付きました。たとえば、1D 配列 X、Y、Z がある場合、それらを 3D プロットにプロットすることはできません。ただし、同じ配列を 2D または任意の ND に再形成すると、それらを 3D でプロットできます。私の質問は、なぜこれが起こると思いますか? さらに重要なことは、(データに関して) 再形成された配列と 1D 配列に違いはありますか?

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.contour2D 入力を受け入れることができることを示しています。XおよびY配列を 1D 配列に変更する場合:

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.contour2D 配列が必要です。

于 2012-11-08T22:05:05.140 に答える