[matplotlib 3D] 1. 二次元データを三次元空間にプロット

matplotlib 3D

matplotlibの3次元プロットについて、デモデータ(mplot3d Examples)を使って、順次、解説をする。

最初は、2次元データを三次元空間にプロットする例。

スポンサーリンク

コード

でできる図。

解説

データの生成とプロット

from mpl_toolkits.mplot3d import Axes3D  # noqa: F401 unused import

#`noqa`は`no quality assurance`の略。importしたのに明示的に使ってないため、エラー出るけど無視してください。とのこと。

fig = plt.figure()
ax = fig.gca(projection='3d')

projection=’3d’で3Dグラフが作れる。

x = np.linspace(0, 1, 100)

0から1で100個の数列作成。

y = np.sin(x * 2 * np.pi) / 2 + 0.5

xy座標でサインカーブをプロット。np.piは円周率

ax.plot(x, y, zs=0, zdir='z', label='curve in (x,y)')

zs=0, zdir=’z’でz=0のxy座標にプロット。

colors = ('r', 'g', 'b', 'k')
x = np.random.sample(20 * len(colors)) y = np.random.sample(20 * len(colors))

色はr=赤、g=緑、b=青, k=黒。
20 * len(colors)で20×colorsの長さ(=4)、計80個のデータをx,yで作成。

c_list = []
for c in colors:
    c_list.extend([c] * 20)

空のclistにcolorsの色を20個ずつ追加していく。colorsは4種なので80個(‘r’を20個,’g’を20個, ‘b’を20個, ‘k’を20個の順)のリストができる。

and the (x,y) points are plotted on the x and z axes.
ax.scatter(x, y, zs=0, zdir='y', c=c_list, label='points in (x,z)')

c=c_listで各点の色を指定している。 zsで固定化する軸の値を選ぶ。 zdirで固定化する軸を選ぶ。

zs=0,zdir=’y’でy=0のxz軸にプロット

zs=0,zdir=’y’

zs=1,zdir=’y’でy=1のxz軸にプロット

zs=1,zdir=’y’

zs=0,zdir=’x’でx=0のyz軸にプロット

zs=0,zdir=’x’

軸範囲と軸ラベルの設定

Make legend, set axes limits and labels
ax.legend()
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
ax.set_zlim(0, 1)
ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z')

視点の変更

ax.view_init(elev=20., azim=-35)

プロットを見やすくするため、視点を変化

azimを低下させると反時計回りに回転する。

ax.view_init(elev=20., azim=-35)
ax.view_init(elev=20., azim=-55)
ax.view_init(elev=20., azim=-75)
azim=-35
azim=-55
azim=-75

elevを増加させると、上からの視点になる。

ax.view_init(elev=20., azim=-35)
ax.view_init(elev=40., azim=-35)
ax.view_init(elev=60., azim=-35)
elev=20
elev=40
elev=60

コメント