なぜ便利か。
NumPy
/
SciPy
で(数学的な)関数のプロットを作成しようものなら、自分で関数を評価して「折れ線化」して得られる点列データを
Matplotlib
のプロット関数に渡す。その折れ線の点列をプロット関数に渡す。ところが SymPy では数式そのものをプロット関数に渡せばよい。手間がひとつ省ける。
SymPy でも 2D または 3D のプロットを描ける。
プロット描画を実現するために Matplotlib が裏で働いている。
パッケージをインストールしていない場合は
TextBackend
という別の手がある。
関数をインポートする形式は
from
sympy.plotting
import
plotxxx
となる。
関数
plot_implicit
だけは不等式をも扱える。不等式に対応する等式を表現する曲線によって定義される平面上の領域を塗りつぶした図が得られる。
3D プロットは描画が重く感じられる。Matplotlib でもこうだったか。
Matplotlib をラップしているのはわかるが、SymPy は設定ファイル
$HOME/.matplotlib/matplotlibrc
を参照しないのか?
isympy
でプロットウィンドウを複数出すと、たいていの場合セッションがおかしくなる。そして Tk のウィンドウが閉じられなくなる。
ここにコンソールの出力をコピーする。
plot(expr,
range,
**kwargs)
plot(expr1,
expr2,
...,
range,
**kwargs)
plot((expr1,
range),
(expr2,
range),
...,
**kwargs)
plot_parametric
plot_parametric(expr_x,
expr_y,
range,
**kwargs)
plot_parametric((expr1_x,
expr1_y),
(expr2_x,
expr2_y),
range,
**kwargs)
plot_parametric((expr_x,
expr_y,
range),
...,
**kwargs)
plot_implicit
plot_implicit(expr)
plot_implicit(expr,
(xsymbol,
xmin,
xmax),
(ysymbol,
ymin,
ymax))
plot3d
plot3d(expr,
range_x,
range_y,
**kwargs)
plot3d(expr1,
expr2,
range_x,
range_y,
**kwargs)
plot3d((expr1,
range_x,
range_y),
(expr2,
range_x,
range_y),
...,
**kwargs)
plot3d_parametric_line
plot3d_parametric_line(expr_x,
expr_y,
expr_z,
range,
**kwargs)
plot3d_parametric_line((expr_x,
expr_y,
expr_z,
range),
...,
**kwargs)
plot3d_parametric_surface
plot3d_parametric_surface(expr_x,
expr_y,
expr_z,
range_u,
range_v,
**kwargs)
plot3d_parametric_surface((expr_x,
expr_y,
expr_z,
range_u,
range_v),
...,
**kwargs)
引数
expr
は SymPy の式オブジェクトである。
引数
range
はいずれも
(x,
xmin,
xmax)
の形式で与える。例えば
(x,
0,
10)
のようにする。
キーワード引数
**kwargs
は、次の三つに分類できる:
プロット関数自身に関するパラメーター
プロットの見てくれを制御するパラメーター
プロットの種類で決まるパラメーター
ここで言うプロットの種類で決まるパラメーターとは、それぞれのプロット関数が処理するサンプルデータの種類によって意味を持つものだ。見たらわかるので、例えば「キーワード引数
surface_color
は曲面プロット系の関数でのみ有効なパラメーターである」というようなことはいちいち断らずに、下の表でそれらをすべて混ぜて示す。
キーワード引数
adaptive
もし
False
を指定するならば、別途
nb_of_points
を指定する必要がある。
depth
adaptive algorithm の深さを正の整数で指定する。
label
不明。Matplotlib の折れ線に付与するラベル?
line_color
プロットする線セグメントの色を指定する。要調査。
nb_of_points
サンプル点列の個数を整数で指定する。変域から一様にサンプリングされる。
nb_of_points_x
nb_of_points
の曲面プロット系 x 軸版。
nb_of_points_y
nb_of_points
の曲面プロット系 y 軸版。
only_integers
プロットのサンプリングを整数座標に限るかどうかを指定する
bool
値。
surface_color
プロットする面パッチの色を指定する。要調査。
steps
line_color
,
surface_color
の値の与え方は複数ある。両者の違いは次元だけだろうから、以下
line_color
の覚え書きを記す。
差し当たり
line_color=(1.0,
0.0,
0.0)
のように与えると、線の色が赤くなることを確認した。
または
float
値を返す関数を渡すと動作することは確認した。しかし、浮動小数点型の数を返す関数からどのように線の色が決まるのかがわからない。SymPy の実装を見ても理解できないのでダメだ。
plot(sin(x), (x, -pi, pi), adaptive=False, line_color=lambda a: sin(a))
簡単なサインカーブのプロットで line_color
のはたらきを見ると、何らかの規則に基づいて線の色が決まっているらしいことは納得した。