[SymPy] Plotting Module

[SymPy] Plotting Module

Plotting Module

 SymPy の Plotting Module をインポートすると、Matplotlib をバックエンドで使って 2Dグラフや 3Dグラフを表示させることができます。離散データを使わずに、SymPy のシンボル(記号)で表された数式をそのままグラフとして視覚化できるのが特徴です。

2Dグラフの描画

 Matplotlib はバックエンドで動くので、特にFigure の設定を直接変更するのでなければ、sympy をインポートするだけでグラフを描画することができます。2Dグラフを描くためには sympy.plotting.plot() を呼び出す必要がありますが、簡略して sympy.plot() と記述することもできます。例としてガウス関数 $y=\exp(-x^2)$ のグラフを $-5\leq x\leq 5$ の範囲で描いてみます。

# sympyをインポート
import sympy

# 記号xを定義
sympy.var('x')

# y = exp(x)
y = sympy.exp(-x**2)

# グラフ設定
# x軸の範囲:[-5, 5], y軸ラベル:'y'
p1 = sympy.plot(y, (x, -5, 5), ylabel = "y")

 sympy plotting
 
 $\sin x$ と $\cos x$ のグラフを重ねて表示するコードです。

# sinx と cosx を重ねて描画

# sympyをインポート
import sympy

# 記号xを定義
sympy.var('x')

# 円周率
pi = sympy.pi

# f = sinx, g = cosx
f = sympy.sin(x)
g = sympy.cos(x)

# f, g のグラフ設定
# x軸の範囲:[-10, 10], 凡例を表示, Figureを非表示
p = sympy.plot(f, g, (x, -10, 10), legend = True, show = False)

# gの線の色をredに変更
p[1].line_color = "red"

# Figureを表示
p.show()

 sympy 三角関数のグラフを重ねる

 plot_parametric() を使うと媒介変数(パラメータ)表示された関数のグラフを描くことができます。以下のサンプルコードでは媒介変数方程式
 
\[x=\cos t,\quad y=\sin t\]
を使って円を描きます。Figureサイズを変更するので、matplotlib.pyplot 本体もインポートしておきます。

# 円を描画

# matplotlib.pyplotをインポート
import matplotlib.pyplot as plt

# Figureサイズを6×6に設定
plt.rcParams['figure.figsize'] = 6, 6

# sympyから必要な関数をインポート
from sympy import cos, sin, var

# sympy.plottingから媒介変数プロット関数をインポート
from sympy.plotting import plot_parametric

# 記号を定義
var('t')

# 円の媒介変数(パラメータ)表示
x = cos(t)
y = sin(t)

# tを-5から5まで動かしてx, yをプロット
p = plot_parametric(x, y, (t, -5, 5))

sympy plot 媒介変数で表された円の方程式
 

東京大学のデータサイエンティスト育成講座 ~Pythonで手を動かして学ぶデ―タ分析~

新品価格
¥3,218から
(2019/8/6 11:41時点)

3Dグラフの描画

 plot3d() は 3次元データを視覚化するための関数です。
 サンプルコードは楕円放物面 $z=x^2+y^2$ のグラフを表示します。

# 楕円放物面の描画

# matplotlib.pyplotをインポート
import matplotlib.pyplot as plt

# Figureサイズを8×8に設定
plt.rcParams['figure.figsize'] = 8, 8

# sympyから必要な関数をインポート
from sympy import var

# sympy.plottingから3D描画関数をインポート
from sympy.plotting import plot3d

# 記号を定義
var('x y')

# 楕円放物面
z = x**2 + y**2

# zを描画
p = plot3d(z, (x, -5, 5), (y, -5, 5))

sympy 3D plot 楕円放物面
 
 plot3d_parametric_surface() はパラメータで表された曲面の方程式を可視化する関数です。下のサンプルコードではパラメータ方程式
 
\[x=\sin u\cos v,\quad y=\sin u\sin v,\quad z=\cos u\]
を使って球面を表示させます。

# 球面の描画

# matplotlib.pyplotをインポート
import matplotlib.pyplot as plt

# Figureサイズを8×8に設定
plt.rcParams['figure.figsize'] = 8, 8

# sympyから必要な関数をインポート
from sympy import var, cos, sin

# plot3d_parametric_surface()をppsという名前でインポート
from sympy.plotting import plot3d_parametric_surface as pps

# 記号を定義
var('u v')

# 球の方程式のパラメータ表示
x = sin(u) * cos(v)
y = sin(u) * sin(v)
z = cos(u)

# (x(u,v), y(u,v), z(u)) をプロット
p = pps(x, y, z, (u, 0, 8), (v, 0, 8))

 sympy 3D plot 球面