【Python】Matplotlibで3次元の散布図を表示しよう!

こんにちは!

皆さんは、3次元の散布図を表示したいと思ったことはありませんか?

Python初心者
3次元のデータを可視化したい時ってよくあるよね!

機械学習でも、データの特徴をつかむために次元圧縮を行なった後に3次元でデータを表示することがよくあります。

Matplotlibを使うと、3次元の散布図を表示した後に回転することができるので非常に便利です。

今回の記事では、Matplotlibを使って3次元の散布図を表示させる方法に関して、以下の内容を紹介します。

  • 使用するモジュール
  • 3次元の散布図の描き方

使用するモジュール

3次元の散布図を表示させるため使用するモジュールは、Matplotlibのmpl_toolkits内の「Axes3D」というモジュールです。

このモジュールは、Matplotlibをインストールすると同梱されているため、使用するにはMatplotlibをインストールしましょう。

3次元の散布図の描き方

3次元の散布図を描くには、Matplotlibのオブジェクト指向の考え方を用います。

3D表示用のaxオブジェクトを作成し、そこにデータをプロットします。

以下のプログラムは、ランダムな3次元のデータを2通り生成し、色分けして3次元の散布図を表示するプログラムです。

import random
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

#ランダムにデータ生成
x1 = [random.random() for i in range(10)]
y1 = [random.random() for i in range(10)]
z1 = [random.random() for i in range(10)]

x2 = [random.random() for i in range(10)]
y2 = [random.random() for i in range(10)]
z2 = [random.random() for i in range(10)]

#axオブジェクト作成
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

#軸ラベル
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_zlabel("Z")

#データのプロット
ax.plot(x1, y1, z1, "o", color="blue")
ax.plot(x2, y2, z2, "o", color="red")

#グラフの表示
plt.show()

実行結果

この方法で表示した3次元の散布図は、以下の図のように様々な方向へ回転することができます。

様々な方向からデータを確認することによって新たな知見が得られることもありますね。

Axes3dはimportしないとエラーが出てしまいます。

プログラム内でimportしている「Axes3D」は、明示的に使用していませんが、importしないとエラーが出てしまうため注意してください。

これに関連して、以前はaxオブジェクトを作成する際に、

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = Axes3D(fig)

と表記していたため、Axes3Dを明示的に使用していましたが、現在では、

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

と表記する方法が推奨されているため、明示的にAxes3Dが使用されていません。

まとめ

今回の記事では、Matplotlibを使って3次元の散布図を表示させる方法に関して、以下の内容を紹介しました。

  • 使用するモジュール
    「Axes3D」を使用
  • 3次元の散布図の描き方
    Axes3dをimportする

3次元の散布図を表示するには、「Axes3D」を使用し、3次元表示用のaxオブジェクトに点をプロットします。

Python初心者
これで3次元の散布図が描けるようになったね!

3次元の散布図は、様々なところで使用されるため、しっかりと方法を覚えておきましょう!