Matplotlib

【入門】Pythonで3次元(3D)グラフを作成(回転させるよ)

【入門】Pythonで3次元(3D)グラフを作成(回転させるよ)

 

Pythonで3次元グラフを作成するにはどうすれば良い?

本記事ではその悩みを解決していきます。

Pythonを使用することで、簡単に3次元のグラフを図示することができます。

本記事では、10〜15分程度でPythonのmatplotlibというライブラリを使用し、初心者でも高度な3次元グラフを作成できる方法を説明していきます。

 

本記事を読むメリット

  1. Pythonを利用して、さまざまな3次元プロットを作成できるようになる
  2. 3次元プロットのカスタマイズができるようになる
  3. Pythonで作成した3次元プロットを回転させ様々な角度から描画できるようになる

 

 

Pythonで3次元プロット作成するための準備

本章では、Pythonで3次元プロット作成する準備を行っていきます。

具体的には、以下の流れで行っていきます。

  1. 使用するパッケージをインポート
  2. matplotlibの基本を学ぶ(理解している方は飛ばして読んでください)

では、具体的に説明していきます。

 

使用するパッケージをインポート

 

まずは、使用するパッケージをインポートしていきます。

下記のコードを入力してください

<input>

# 使用するパッケージをインポート
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

 

今回は、3次元グラフを作成するために『mpl_toolkits.mplot3dからAxes3D』をインポートしました(最近は書かなくても大丈夫になっている場合も多いです。)

『numpy』の基本が心配という方は、下記の記事を参考にしてください。

 

numpyの使い方【15分で使えるようになる】機械学習やデータ解析をいち早く行うために、numpyに関する基本事項を体系的にまとめました。15分程度で読めるので、この記事でnumpyの基本を習得し、次のステップに進みましょう。...

 

matplotlibの基本を学ぶ

 

3次元グラフ作成では、matplotlibのカスタマイズ方法をそのまま利用することができます。

そのため、matplotlibのカスタマイズ方法を知っておく必要があります。

matplotlibの基本操作が心配な方は下記を参考にしてください(15分程度で高度なグラフが作成できるようになります)

 

【15分】Pythonでグラフを作成する方法|matplotlibの基本をマスターPythonでグラフを書くことが難しそうだと思っていませんか?実は、Pythonを使用したグラフ作成は、excelより便利で簡単です。この記事では、初心者でもグラフが書けるように丁寧にpythonのグラフの作成法を説明します。...

 

Pythonで3次元曲線をプロットする方法

 

本章では、Pythonで3次元プロットを作成する方法を具体的な例を使用して説明していきます。

具体的には、下記のステップで説明していきます。

  1. ウインドウと3次元グラフを作成
  2. 3次元曲線をプロットする方法

詳しく説明していきます。

 

ウインドウと3次元グラフを作成

 

本節では、3次元曲面をプロットするためのウインドウ(figureオブジェクト)と3次元グラフ(axオブジェクト)を作成する二つの方法を説明します。

ウインドウと3次元グラフを作成する方法は以下の二つです。

  1. ウインドウとグラフを別々に作成
  2. ウインドウとグラフを同時に作成

詳しく説明していきます。

 

ウインドウとグラフを別々に作成

 

ウインドウとグラフを別々に作成する方法には以下のコードを入力してください。

<Input>

# ウインドウとグラフを別々に作成
fig = plt.figure(figsize=(6, 6))
ax = fig.add_subplot(111, projection='3d')

 

<output>

 

ウインドウとグラフを同時に作成

 

ウインドウとグラフを同時に作成する場合は、『plt.subplots関数』の引数に『subplot_kw={‘projection’ : ‘3d’}』を設定してください。

<input>

# ウインドウとグラフを同時に作成
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw={'projection' : '3d'})

 

<output>

 

本記事では、ウインドウとグラフを同時に作成する方法を使用し説明を行っていきます。

 

3次元曲線をプロットする方法

 

本節では、3次元曲線を具体的にプロットしていきます。

まずは、実際にプロットする関数を準備していきます。

今回は、下記の螺旋を表す関数をプロットしていきます。

<input>

# 図示する関数
t = np.linspace(- 2*np.pi, 2*np.pi)
x = np.cos(t)
y = np.sin(t)
z = t

 

プロットする方法は、matplotlibと変わらず、『plotメソッド』を使用し、プロットすることができます。

<input>

fig, ax = plt.subplots(figsize=(6, 6), subplot_kw={'projection' : '3d'})
ax.plot(x, y, z, c='b')
ax.set_xticks(np.linspace(-1.0, 1.0, 5))
ax.set_yticks(np.linspace(-1.0, 1.0, 5))
plt.show()

 

<output>

3次元曲面をプロット

 

コードを見ていただくとわかると思いますが、プロットラインの色変更や軸メモリの設定はmatplotlibのカスタマイズと全く同じです。

次章では、3次元曲面を作成する方法を説明していきます。

 

Pythonで3次元曲面をプロットする方法

本章では、3次元曲面をプロットする方法を説明していきます。

具体的には、下記の流れで説明していきます。

  1. メッシュ(格子点)を作成
  2. 3次元曲面をプロット : plot_surface
  3. カラーバーを設定する方法
  4. ワイヤーを利用し3次元曲面をプロット : plot_wireframe

詳しく解説していきます。

 

メッシュ(格子点)を作成

 

3次元曲面を作成するためには、最初にメッシュ(格子点)を作成する必要があります。

理由は、作成したメッシュ(格子点)にz軸の値を対応させて3次元曲面をプロットを行うからです。

メッシュは、numpyの『meshgrid関数』を使用すること簡単に作成できます。

具体例として、4×4の格子点を作成します。

<input>

# メッシュ関数の例
x = np.array([0, 1, 2, 3])
y = np.array([0, 1, 2, 3])
xx, yy = np.meshgrid(x, y)

 

これで、meshgrid関数を利用し下記のようなメッシュ(格子点)を作成することができました。

meshgridを作成

実際に、xxとyyを見てみると格子点が作成できていることがわかります。

<input>

print(xx)
print('=========')
print(yy)

 

<output>

[[0 1 2 3]
 [0 1 2 3]
 [0 1 2 3]
 [0 1 2 3]]
=========
[[0 0 0 0]
 [1 1 1 1]
 [2 2 2 2]
 [3 3 3 3]]

 

次節では、具体的に3次元曲面をプロットしていきます。

 

3次元曲面をプロット : plot_surface

 

まずは、プロットするための具体的な関数を準備します。

今回は、下記の関数を使用します。

# 図示する関数
def func(x, y):
    return np.sin(x) * np.sin(y)

 

3次元曲面をプロットするためには、『plot_surface』を利用します。

では、実際に曲面をプロットしてみましょう。

<input>

# メッシュを作成
x = np.arange(-5.0, 5.0, 0.1)
y = np.arange(-5.0, 5.0, 0.1)
X, Y = np.meshgrid(x, y)

# plot_surfaceで曲面プロット
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw={'projection' : '3d'})
ax.plot_surface(X, Y, func(X, Y), rstride=1, cstride=10, cmap='jet', alpha=0.4)
plt.show()

 

<output>

plot_surfaceによるプロット

 

plot_surfaceの引数について説明していきます。

plot_surfaceの引数  
第一引数 X座標
第二引数 Y座標
第三引数 Z座標
rstride, cstride 各軸に対して何ステップごとにプロットするかを設定
cmap カラーマップを指定 colormapの種類に関してはこちら(公式)
alpha 透明度

 

次節では、今回作成したグラフにカラーバーを設定する方法を説明していきます。

 

カラーバーを設定する方法

 

本節では、カラーバーを3次元曲面に設定する方法を説明します。

カラーバーは、『colorbarメソッド』をfigureインスタンスに適応することで設定することができます。

<input>

fig, ax = plt.subplots(figsize=(8, 6), subplot_kw={'projection' : '3d'})
surface = ax.plot_surface(X, Y, func(X, Y), rstride=1, cstride=10, cmap='jet', alpha=0.4)
# カラーバーを設定
fig.colorbar(surface, ax=ax, shrink=0.5)
plt.show()

 

<output>

カラーバーを設定する

 

colobarメソッドの詳しい引数を説明します。

colobarの引数  
第一引数 カラーバーを設定したいグラフ
ax colorbarを設定したいaxオブジェクト
shrink カラーバーの大きさ

 

ワイヤーを利用し3次元曲面をプロット : plot_wireframe

 

『plot_wireframe』を使用することで、ワイヤーを利用して3次元曲面をプロットすることができます。

<input>

fig, ax = plt.subplots(figsize=(6, 6), subplot_kw={'projection' : '3d'})
# plot_wireframeを使用
ax.plot_wireframe(X, Y, Z, linewidth=0.3)
plt.show()

 

<output>

wireを利用してプロット

 

『plot_wireframeメソッド』の引数を説明します。

plot_wireframe  
第一引数 X座標の値
第二引数 Y座標の値
第三引数 Z座標の値
linewidth ワイヤーの太さ

 

次章では、3次元散布図を作成する方法を紹介していきます。

 

Pythonで3次元散布図を作成する方法

 

『scatter3Dメソッド』を使用することで、3次元散布図を作成することができます。

<input>

fig, ax = plt.subplots(figsize=(6, 6), subplot_kw={'projection' : '3d'})
# scatter3Dを使用
ax.scatter3D(X, Y, func(X, Y), s=0.1, color='red', depthshade=True)
plt.show()

 

<output>

3次元散布図

 

scatter3Dの引数を説明していきます。

scatter3D  
第一引数 X座標の値
第二引数 Y座標の値
第三引数 Z座標の値
s マーカーのサイズ
color マーカーの色
depthshade マーカーに影を作る

 

次章では、これまで作成したような3次元グラフを回転する方法を説明します。

 

3次元グラフを回転させる

 

『view_initメソッド』をaxオブジェクトに適用することで3次元グラフを回転させることができます。

<input>

fig, ax = plt.subplots(figsize=(6, 6), subplot_kw={'projection' : '3d'})
ax.plot_surface(X, Y,func(X, Y), rstride=1, cstride=10, cmap='jet', alpha=0.3)
# グラフを回転
ax.view_init(elev=10, azim=50)
plt.show()

 

<output>

3次元グラフを回転

 

『view_init』の引数について解説していきます。

view_init  
elev 縦方向の回転
azim 横方向の回転

 

もう少し引数について詳しく説明すると、下記のような状態を0度として、縦方向・横方向に何度回転させるかというのが『elev, azim』です。

角度0の状態回転角度0度のグラフ

 

まとめ

 

お疲れ様です。ここまでを理解すれば、複雑な3次元グラフも簡単に作成することができます。

簡単に今回説明したことを復習しましょう。

  1. Pythonで3次元プロットを作成するための準備
  2. Pythonで3次元曲線をプロットする方法
  3. Pythonで3次元曲面をプロットする方法
  4. 3次元グラフを回転させる

 

さらに高度なグラフをmatplotlibを拡張させた『seaborn』というライブラリを使用して作成することができます。

seabornについて学びたい方は下記を参考にしてください。

 

【15分で習得】seabornの使い方を徹底解説seabornを使用することで、簡単に高度なグラフを描画することができます。また、使用方法もmatplotlibと変わらず簡単に行うことができます。...

 

より体系的な知識を身につけたい方はUdemyやプログラミングスクールをおすすめします。

ABOUT ME
努力のガリレオ
【運営者】 : 東大で理論物理を研究中(経歴)東京大学, TOEIC950点, NASA留学, カナダ滞在経験有り, 最優秀塾講師賞, オンライン英会話講師試験合格, ブログと独自コンテンツで収益6桁達成 【編集者】: イングリッシュアドバイザーとして勤務中(経歴)中学校教諭一種免許取得[英語],カナダ留学経験あり, TOEIC650点
【必見】オンライン英会話を利用しないのは時代遅れ?

 

 

英語学習でオンライン英会話を利用しないのは、時代遅れです…

 

『スピーキングができないから、オンライン英会話はまだまだ後回し…』と思っている方は大間違いです。

 

最近のオンライン英会話は、教材が豊富で、もはや参考書・問題集は不要になりつつあります…

また、多くのオンライン英会話が最新メソッドを導入して、スピーキングのみならず、リーディング・リスニング・ライティングの能力も上がる教材を導入しています。

さらに、効率的な記憶ツールや学習カウンセリングのサービスが提供されることもあります!!

 

特に初心者の方は、下記の記事で紹介しているオンライン英会話をチェックしてみてください。

 

【東大生が厳選】初心者にオススメなオンライン英会話10選実は、最適なオンライン英会話はユーザーによって異なります。本記事では、複数のオンライン英会話を経験した私が、他社と比較しつつ特徴を明確にして本当にオススメできるオンライン英会話を10個厳選しました。...

 

中には、2週間の無料体験期間を提供しているオンライン英会話もあります。

英語学習が滞っている方や英語学習を習慣化できていない方は無料体験期間で良いので挑戦してみてください。

何事も行動することが大切です。

 

また、多くのオンライン英会話がTOEICやTOEFL等の外部英語試験の対策レッスンを提供してきています。

中には、追加料金なしで、本番さながらの対策や面接対策を行うことができるオンライン英会話もあります。

 

特にTOEIC対策に強いオンライン英会話は下記を参考にしてください。

 

【徹底比較】TOEIC対策に強いオンライン英会話5選|東大生が厳選!オンライン英会話はTOEICのスコアを効率的に上げる最強のツールです。本記事では、TOEICにオンライン英会話が効果的な理由とTOEIC対策に強いオンライン英会話を厳選しました。詳しい内容は記事を参考にしてください。...

 

TOEFL対策に強いオンライン英会話に関しては下記を参考にしてください。

 

【徹底比較】TOEFL対策に強いオンライン英会話5選|東大生が厳選!TOEFL対策にオンライン英会話は有効です。事実、私もTOEFL対策のためにオンライン英会話を使用してTOEFL ibtの4技能、TOEFL itpのスコアを爆上げすることができました。この記事では、私が思うTOEFL対策に最適なオンライン英会話を紹介しました。...