スポンサーリンク

Matplotlibによる3Dプロット(簡略版)

プログラミング
0
(0)

概要

以前

matplotlibで3次元空間に2次元ヒストグラムを表示する方法
この記事では、PythonのMatplotlibを用いて、XとYの2種類の値をとる2次元変数(X, Y)についての2次元ヒストグラムを、3次元空間に立体的に表示する方法を説明する。その方法を用いれば、この記事のアイキャッチ画像のようなグラ...

等でMatplotlibを用いた3次元プロットについて述べたが、詳しい理屈は置いておいて、とりあえず図が書きたいという読者のために簡略版記事を作成した。

もっと複雑なことがしたい場合は、末尾に参考リンクを載せておいたのでそちらを参照してほしい。

3Dプロットの基本(最小限)

  1. x軸, y軸を作る(ともに1次元)
  2. X, Y = np.meshgrid(x, y)で2次元メッシュX, Yを作る
  3. X, Yを用いて、関数Z=f(X, Y)を入力する

コード例

\(f(x, y)=x^2-y^2\) を図示し、等高線を表示した。

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

# 描画エリアの作成
fig = plt.figure(figsize=(6, 6))
# 3Dを指定
ax = fig.add_subplot(111, projection="3d")

# 各軸の設定
ax.set_xlabel("x", size=10)
ax.set_ylabel("y", size=10)
ax.set_zlabel("f(x, y)", size=10)
ax.set_zlim(-30, 30)

# x軸、y軸の作成
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)

# メッシュの作成
X, Y = np.meshgrid(x, y)
# 関数の入力
Z = X**2 - Y**2

# 曲面の描画
ax.plot_surface(X, Y, Z, cmap="viridis")
# 等高線の表示(z軸の最下部に合わせる)
ax.contour(X, Y, Z, colors="black", offset=-30)
plt.show()

少しだけメッシュの解説

X, Y = np.meshgrid(x, y)は、1次元配列

  • x = [0, 1, 2]
  • y = [3, 4]

から

# 本当はnp.ndarray
X = [
    [0, 1, 2],
    [0, 1, 2]
]
Y = [
    [3, 3, 3],
    [4, 4, 4]
]

のような2次元配列を作ってくれる。

これらを合わせると

(0, 3)(1, 3)(2, 3)
(0, 4)(1, 4)(2, 4)

となり、x軸・y軸からなる2次元平面が構成されていることがわかる。

あとはこれを用いて、2変数関数を表現することができる。

参考

  1. ヒストグラムを表示したいとき
matplotlibで3次元空間に2次元ヒストグラムを表示する方法
この記事では、PythonのMatplotlibを用いて、XとYの2種類の値をとる2次元変数(X, Y)についての2次元ヒストグラムを、3次元空間に立体的に表示する方法を説明する。その方法を用いれば、この記事のアイキャッチ画像のようなグラ...
  1. 空間に線や面を描きたい、重ねて表示したいとき
Matplotlibで3次元空間に円を描画、透過、境界を描画、線を引く
この記事では、PythonのMatplotlibを使用して3次元空間に球や面、線などを描画する方法について解説する。なお、ここで作成した画像の一部はにおいて利用されている。球体の描画基本球を描画...

この記事は役に立ちましたか?

星をクリックして、評価してください!

現在の平均評価 0 / 5. 評価した人数: 0

お役に立てたようで嬉しいです!

著者SNSをフォローしていただけると、更新情報が手に入ります。

記事がご期待に沿えなかったようで、申し訳ありません…。

是非、改善点を教えてください!

この記事において改善すべき点や、追加で知りたかったことは何ですか?

コメント