matplotlibで3D散布図(scatter)の作成のやり方を紹介したいと思います。
3D scatterを作ってみる
基本的には2Dグラフの場合と同じようにして作成することができます。
2Dグラフと違うところは
- 3次元目のデータを用意する
add_subplot
においてprojection='3d'
を指定する
ところだけです。
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.scatter(x, y, z)
plt.show()

3D scatter をカスタマイズ
基本的に2dの場合と同じように色やサイズ等をカスタマイズすることができます。
全ての色を変更
color
引数から色を指定します。
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.scatter(x, y, z, color='purple')
plt.show()

個別に色を設定
個別に散布図の点の色を変更することもできます。
カラーネームのリストから設定
リスト形式のカラーネームをcolor引数に与えることで、それに対応した点の色を変更することができます。
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(5)
y = np.random.rand(5)
z = np.random.rand(5)
colors = ['green', 'blue', 'yellow', 'purple', 'red']
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.scatter(x, y, z, color=colors)
plt.show()

RGBから設定
カラーネームでなくRGB or RGBA でもOKです。
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
colors = np.random.random_sample((100, 3))
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.scatter(x, y, z, color=colors)
plt.show()

透明度を設定
color
引数にRGBAを与えることで、個別に透明度を設定できますが、alpha
引数を利用することで全ての点の透明度を一括で設定できます。
値は0.0~1.0までで、0.0が完全に透明を表し、1.0が完全に不透明を表します。
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.scatter(x, y, z, alpha=0.2)
plt.show()

sizeの変更
scatterのmarkerの大きさは s
引数に数値を与えることで、変更することができます。
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.scatter(x, y, z, s=100)
plt.show()

markerの形を変更
3D scatterのmarkerの形はデフォルトで●ですが、色々な形に変更することができ、
変更に用いるのはmarker
引数です。
具体的にどのような文字を引数に渡せばどのようなmarkerになるかは下記のドキュメントを参照してください。
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.scatter(x, y, z, marker='|')
plt.show()

matplotlib.markers — Matplotlib 3.7.1 documentation
枠線のカスタマイズ
3D scatterの点は塗りつぶし部と枠線によって構成されています。この枠線部のみをカスタマイズすることが可能です。
枠線の色を変更
色の指定にはedgecolor
引数を使いますが、色の指定方法は前述したcolor引数と同様で、カラーネームで一括設定もできれば、点の数だけカラーネーム or RGBを用意して個別に指定することもできます。
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.scatter(x, y, z, edgecolor='r')
plt.show()

枠線の幅を調整
枠線の線幅はlinewidth
引数によって調整ができます。
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.scatter(x, y, z, edgecolor='r', linewidth=5)
plt.show()

他の3Dグラフはこちら
コメント