3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Matplotlib入門】3D Scatter Plotを試してみる♬

Posted at

何度も3dのScatterPlotでミスをするので、ここで一度基本を押さえておこうと思う。
元ネタは参考①のとおりですが、ミスする箇所はちょっと異なるので記事にしておきます。

元々の使い方は参考②のMatplotlibのドキュメントにあります。
そして、参考③はnp.reshape(X[:,0],-1)の表現のために引用しています。つまり、引数は1次元の変数である必要があります。

【参考】
matplotlibで3Dプロット
scatter(xs, ys, zs=0, zdir='z', s=20, c=None, depthshade=True, *args, **kwargs)@mplot3d API@ matplotlib
matplotlib.scatter() not working with Numpy on Python 3.6
###今回のコードは以下のとおり

import numpy as np
import matplotlib.cm as cm
import matplotlib.pyplot as plt
import matplotlib

print(matplotlib.__version__)
# 3.0.3
#for 3D plotting
from mpl_toolkits.mplot3d import Axes3D

if __name__ == '__main__':
    N = 100
    X = np.random.rand(N, 3)
    y = np.random.rand(N) * 2 - 1
    
    fig = plt.figure()
    ax1 = fig.add_subplot(211 , projection='3d')
    sc = ax1.scatter(X[:, 0], X[:, 1],zs=X[:, 2],zdir='z', s=50, vmin=0, vmax=1, c=y, cmap=plt.cm.jet) 
    plt.colorbar(sc)
    
    ax2 = fig.add_subplot(212, projection='3d')
    sc2=ax2.scatter3D(np.ravel(X[:, 0]), np.ravel(X[:, 1]), zs=X[:, 2],zdir='z',s=50, vmin=0, vmax=1, c=y, cmap=plt.cm.jet)
    plt.colorbar(sc2)
    plt.show()

ここまでのグラフは以下のとおり、同じ絵が描けました。
Figure_1_3dscatter.png

    fig = plt.figure()
    ax3 = fig.add_subplot(211)
    sc3 = ax3.scatter(np.reshape(X[:,0],-1), np.reshape(X[:,1],-1), c=np.reshape(X[:,2],-1), cmap=plt.cm.jet) #cmap=plt.cm.jet cm.seismic plt.cm.Spectral
    plt.colorbar(sc3)

    ax4 = fig.add_subplot(212, projection='3d')
    sc4=ax4.scatter3D(X[:, 0], X[:, 1],c=np.reshape(X[:,2],-1), cmap=plt.cm.jet)
    plt.colorbar(sc4)
    plt.show()

上記の上のコードが通常よく使う二次元のプロットにカラーで3次元目を表すコードです。
そして、最後のコードでprojection='3d'を指定しないとエラーで描画できません。
※ここが通常のscatterとscater3Dの異なる部分のようです
Figure_2_scatter3d.png
###まとめ
・3d Scatter Plotについて試してみた
・描画の仕方としてscatterとscatter3Dは3dプロットだと同じ振る舞いをするが、2dプロットの場合はscatterを使う方が見やすい
・おまじないとしてfrom mpl_toolkits.mplot3d import Axes3Dとprojection='3d'がないと3dプロットはできない
・引数はX,Y,Zとcは1ーDである必要があり、np.ravel(X[:, 0])やnp.reshape(X[:,0],-1)などで変換することができる

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?