添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

なぜ便利か。 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 のはたらきを見ると、何らかの規則に基づいて線の色が決まっているらしいことは納得した。

  •