SymPyの使い方21 ~ plottingモジュール2
前回はSymPyのplottingモジュールを用いては簡単な2次元のプロットについて紹介したが、今回は3次元プロットとパラメトリックプロットについて紹介する。
1. 3次元プロット
SymPyのplottingモジュールを用いて3dプロットを行うにはsympy.plotting
のplot3d
を用いる。
from sympy import * from sympy.plotting import plot3d
基本的にはplot3d
内にプロットする3次元関数のシンボリック表現を記述すればよい。例えばガウシアン
x,y=symbols('x y') plot3d(exp(-(x**2+y**2)),(x,-2,2),(y,-2,2))
実行すると以下のような3次元プロットが得られる。なお(x,-2,2),(y,-2,2)はx,yの描画範囲を-2~2に指定している。
また、複数の3次元プロットを描画するには、関数をコンマ区切りで記述する。例えば上記のガウシアンとx*y/10は
plot3d(exp(-(x**2+y**2)),x*y/10,(x,-2,2),(y,-2,2))
なお、プロットの色変更については、surface_color
というオプションがあって以下のように設定できるが
plot3d(exp(-(x**2+y**2)),(x,-2,2),(y,-2,2),surface_color="red")
グリッドの線色が変更するのみ。表面のテクスチャ、カラーマップは直接変更できるオプションがない。
2. パラメトリックプロット
次にパラメトリックプロットの方法について紹介する。まず2次元のパラメトリックプロットはplot_parametric
を使用する。
基本的にはxのパラメトリック表現:x(u),yのパラメトリック表現:y(u)を記述する。例えば半径1の円:x=cos(u),y=sin(u)は
from sympy.plotting import plot_parametric u=symbols('u') plot_parametric(cos(u),sin(u),(u,0,7),size=(4,4))
なおデフォルトのアスペクト比だと楕円に見えるため出力サイズをsize=(4,4)
として指定することで正円に見える。
3次元のパラメトリックプロットはplot3d_parametric_line
を使用する。2次元と同じようにxのパラメトリック表現:x(u),yのパラメトリック表現:y(u),zのパラメトリック表現:z(u),を記述する。
プロットする線色を変更するにはline_color
を用いて指定する。以下はline_color="red"
として赤に変更、またサイズもx,y,zのサイズが同じになるようにsize=(5,5,5)
とした。
from sympy.plotting import plot3d_parametric_line plot3d_parametric_line(cos(u),sin(u),u,(u,-5,5),line_color="red",size=(5,5,5))
パラメトリックプロットで複数の関数を表示するには(x1(u),y1(u),z1(u), (u,min2,max2)),(x2(u),y2(u),z2(u), (u,min2,max2))
といった方法で記述する。
plot3d_parametric_line((cos(u),sin(u),u,(u,-5,5)),(0.5*sin(u),0.5*cos(u),0.5*u,(u,-5,5)),size=(5,5,5))
3. まとめ
SymPyのplottingモジュールを用いたプロット方法について紹介してきた。シンボリックな関数表現から直接プロットを作成できるとい利便性の一方で、プロットの体裁を整えるには機能が限定されているため、例えば事前確認はSymPyのplottingを使い、レポート用はmatplotを使うなどの使い分けするというのがよさそうだ。