機械学習や科学計算などで多くのデータを取り扱う際に、データの可視化は重要です。その中でも、3D散布図はデータの分布や関係性を直感的に理解するのに役立ちます。Pythonのライブラリであるmatplotlibを使用して、3D散布図を描く方法について解説します。
2次元の散布図を描きたい方はこちらを参考にしてください
matplotlibとは
プログラミング言語Pythonおよびその科学計算用ライブラリNumPyのためのグラフ描画ライブラリである。オブジェクト指向のAPIを提供しており、様々な種類のグラフを描画する能力を持つ。描画できるのは主に2次元のプロットだが、3次元プロットの機能も追加されてきている。描画したグラフを各種形式の画像(各種ベクトル画像形式も含む)として保存することもできる(Wiki参照)
matplotlib – Wikipedia
基本のプロット
3D散布図を描く基本的なソースコードは以下の通りです。参考として2次元の散布図を描画する方法と比較して違いに注目してください。
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [9, 8, 7, 6, 5]
plt.scatter(x,y)
plt.show()
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = [1, 2, 3, 4, 5]
y = [1, 8, 3, 6, 5]
z = [1, 5, 3, 8, 9]
ax.scatter(x, y, z)
plt.show()
xとyの同じインデックス例えば(x[0], y[0], z[0])といった具合にプロットしてくれます。つまり(1,1,1)、(2,8,5)、(3,3,3)、(4,6,8)、(5,5,9)とプロットされていきます。
3次元プロットグラフには特別な機能が付き、ドラッグで回ります。
3次元のグラフ描画について調べていると以下のコードを見かけます。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
これは過去(v1.0.0)は使われていたもので、現バージョンでは推奨されていません。
見た目のカスタマイズ
3D散布図の見た目をカスタマイズすることもできます。以下のコードでは、マーカーの色と形の変更し、凡例を設定しています。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = [1, 2, 3, 4, 5]
y = [1, 8, 3, 6, 5]
z = [1, 5, 3, 8, 9]
ax.scatter(x, y, z, c='r', marker='^', label='test')
ax.legend()
plt.show()
Tips:主要なカスタマイズキーワード
3D散布図作成時に使用できる引数オプションが非常に多くあります。が必要最低限テーブルにまとめた分をおさえて記載します。
kywd | 入力例 | 備考 |
---|---|---|
x,y,z | [1,2,3,4,5] または 事前に定義したlistなど | array形式のもの ※必須 |
s | s=5 または x,yと同範囲のリスト(要素はサイズ) | マーカーの大きさ 指定しないと20 |
c | c=”red” または c=”#FFFF00″ または c=(1.0,0,1.0) | マーカーの色 色名や16進数、RGBでの指定が可能 |
marker | marker=”.” | マーカーの形 指定しないと○ *は星形など様々指定可 |
alpha | alpha=0.3 | マーカーの透明度 指定は0-1の間で行う |
linewidths | linewidths=2 | マーカーの枠線の幅 |
label | label=”label1″ | 凡例名 |
色見本
color example code: named_colors.py — Matplotlib 2.0.2 documentation
マーカー見本
lines_bars_and_markers example code
見た目のカスタマイズ(目盛り線)
X軸に「X」、Y軸に「Y」などそれぞれの軸にラベルを付けるためにプログラムを修正します。
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.add_subplot(111, projection='3d') x = [1, 2, 3, 4, 5] y = [1, 8, 3, 6, 5] z = [1, 5, 3, 8, 9] ax.scatter(x, y, z, c='r', marker='^', label='test') ax.legend() ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') plt.show()
次の最後の項ではに2次元のグラフとの組み合わせができるかを試します。
一つのグラフに折れ線と3D散布図を重ねる
一つのグラフに複数のプロット重ねて表示することも可能です。以下のコードでは、二つのデータセットを折れ線グラフと3D散布図として同じグラフ上に描画しています。
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.add_subplot(111, projection='3d') x = [1, 2, 3, 4, 5] y = [1, 8, 3, 6, 5] z = [1, 5, 3, 8, 9] ax.scatter(x, y, z, c='r', marker='^', label='test') plt.plot(x,y,label='test',linewidth=3,color='b', marker='^',markeredgecolor="black") ax.legend() ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') plt.show()
まとめ
matplotlibを使用して3D散布図を描く方法をまとめると以下の通りです。
- matplotlibはPythonのグラフ描画ライブラリであり、3Dプロットの機能も提供している。
- scatter()関数を使用して散布図を描画し、必要に応じて色やマーカーの形を変更できる。
- 散布図全体の見た目を変更するには、軸ラベルを追加するなどのオプションを設定する。
これらの手法を組み合わせることで、さまざまなデータの特性や要件に応じた3D散布図を描画することができます。
コメント