3D散布図(scatter)の作り方【matplotlib】

matplotlib

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.4.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グラフはこちら

コメント

タイトルとURLをコピーしました