web-dev-qa-db-ja.com

matplotlib-高さの長方形配列からの3Dサーフェス

MatplotlibでいくつかのHDFデータをプロットしようとしています。 h5pyを使用してそれらをインポートした後、データは次のような配列の形式で保存されます。

array([[151, 176, 178],
       [121, 137, 130],
       [120, 125, 126])

この場合、x値とy値は配列のフィールドのインデックスにすぎず、z値は特定のフィールドの値です。 (x、y、z)形式では、次のようになります。

(1,1,151)
(2,1,176)
(3,1,178)
(1,2,121)
...

等々。

この種のデータから表面プロットを行う簡単な方法はありますか?配列全体を反復処理することで、これを(x、y、z)タプルに変更できることはわかっていますが、おそらく必要ありませんか?

15
Paweł Rumian

3次元表面プロットが必要な場合は、最初にmeshgridを作成する必要があります。あなたが試すことができます:

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

X = np.arange(1, 10)
Y = np.arange(1, 10)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='hot', linewidth=0, antialiased=False)
ax.set_zlim(-1.01, 1.01)

fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()

生成されます、 enter image description here

ただし、関連する情報がz値のみにある場合は、単にimshowを使用できます。ここで、z値はその色で表されます。これは次の方法で実現できます。

im = plt.imshow(Z, cmap='hot')
plt.colorbar(im, orientation='horizontal')
plt.show()

どちらが与えるでしょう、

enter image description here

40
imsc