プロットを利用する¶
ここでは SymPy プロット機能に関する覚え書きを記す。
所感¶
なぜ便利か。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 のウィンドウが閉じられなくなる。
Todo
ここにコンソールの出力をコピーする。
早見表¶
プロット関数早見表¶
手軽にプロットを描くための関数の早見表を下に示す。
関数 |
呼び出しの形 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
プロット関数引数メモ¶
プロット関数の引数の与え方には一貫性があるので、まとめて理解することができる。
引数
expr
は SymPy の式オブジェクトである。引数
range
はいずれも(x, xmin, xmax)
の形式で与える。例えば(x, 0, 10)
のようにする。キーワード引数
**kwargs
は、次の三つに分類できる:プロット関数自身に関するパラメーター
プロットの見てくれを制御するパラメーター
プロットの種類で決まるパラメーター
プロット関数自身に関するパラメーター¶
プロット関数自身に関するパラメーターは全プロット関数の **kwargs
が扱う。そのようなキーワード引数を次の表に示す:
キーワード引数 |
説明 |
---|---|
|
プロットを表示するかどうかを指定する |
プロットの見てくれを制御するパラメーター¶
プロットの見てくれを制御するパラメーターは全プロット関数の **kwargs
が扱う。そのようなキーワード引数を次の表に示す:
キーワード引数 |
説明 |
---|---|
|
プロットのアスペクト比を例えば |
|
Matplotlib の |
|
Matplotlib の |
|
プロットの中央の座標を例えば |
|
プロットの凡例を表示するかどうかを指定する |
|
Matplotlib の |
|
プロットの表題を文字列で指定する。 |
|
x 軸のラベル文字列。 |
|
x 軸の制限範囲を例えば |
|
x 軸のスケーリングをどうするか。文字列 |
|
|
|
|
|
|
プロットの種類で決まるパラメーター¶
ここで言うプロットの種類で決まるパラメーターとは、それぞれのプロット関数が処理するサンプルデータの種類によって意味を持つものだ。見たらわかるので、例えば「キーワード引数 surface_color
は曲面プロット系の関数でのみ有効なパラメーターである」というようなことはいちいち断らずに、下の表でそれらをすべて混ぜて示す。
キーワード引数 |
説明 |
---|---|
|
もし |
|
adaptive algorithm の深さを正の整数で指定する。 |
|
不明。Matplotlib の折れ線に付与するラベル? |
|
プロットする線セグメントの色を指定する。要調査。 |
|
サンプル点列の個数を整数で指定する。変域から一様にサンプリングされる。 |
|
|
|
|
|
プロットのサンプリングを整数座標に限るかどうかを指定する |
|
プロットする面パッチの色を指定する。要調査。 |
|
要調査。 |
Todo
adaptive algorithm というものを調べる。
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
のはたらきを見ると、何らかの規則に基づいて線の色が決まっているらしいことは納得した。