#sympy.plottingでaspect_ratioが変えられない? 件について
私の勘違いだったらすいません.
私の知識不足でした.@SaitoTsutomu 様にコメントをいただき解決しました.
jupyter notebook
を起動します.まずは下準備.
from sympy.plotting import plot, plot_implicit, plot_parametric
from sympy import symbols, sin, cos, pi
x, y, t = symbols('x y t')
##plot
plot(x**2, (x, -2, 2))
とすれば, $-2\leqq x\leqq 2$ の範囲における $y=x^2$ が描写されます.
複数の関数のグラフを同時に表示することも可能です.$y=x^2$ と $y=x$ を同じ座標空間に描写します.
plot(x**2, x, (x, -2, 2))
##plot_implicit
$f(x, y)=0$ の形の図形(いわゆる陰関数)も描写できます.次は $x^2+y^2-1=0$ すなわち原点を中心とする半径 $1$ の円です.
plot_implicit(x**2+y**2-1)
縦横のアスペクト比が気になりますが,一応円です.plot_implicit
は二つ以上の式を設定して,複数の曲線を描くことができないみたいです.陰関数はそれだけプロットが面倒だということでしょうか.
##plot_parametric
これが本命.$y=f(x)$ だとどうしても表現が制限されます.そこで媒介変数表示で表される図形の描写です.例えば
$$
x = \cos t,\ y = \sin t\quad (0\leqq t\leqq 2\pi)
$$
は同じく原点を中心とする半径 $1$ の円ですが,これをプロットするには次のようにします.
plot_parametric(cos(t), sin(t), (t, 0, 2*pi))
複数の曲線も同時に描写できます.
plot_parametric((cos(t), sin(t)), (cos(t)+1, sin(t)+1), (t, 0, 2*pi))
個別にパラメータの範囲を設定することも可能.
plot_parametric((cos(t), sin(t), (t, 0, 2*pi)), (cos(t)+1, sin(t)+1, (t, 0, pi)))
ところで,さっきからずっと気になっている方がいらっしゃると思いますが,円をプロットしているはずなのに楕円が映っています.公式ドキュメントによれば
aspect_ratio : tuple of two floats or {‘auto’}
とあるんですが,これを設定しても何も変わらず……
plot_parametric((cos(t), sin(t)), (cos(t)+1, sin(t)+1), (t, 0, 2*pi), axis=False, aspect_ratio=(1, 1))
axis
オプションは適用されているのは確認できますが,aspect_ratio
は応答なし.Googleで検索してみたんですが,英語サイトばかりで,一応,少し目を通してみましたが,すっきりした解答は得られず.
そもそもsympyのplotはmatplotlibを仲介しているらしく,matplotlibの設定を無理矢理変更する? みたいな解答があったんですが,それをやるなら最初からmatplotlibで図示した方がよいのではないかと思う始末でした.
**kwargsって……
プログラマでもなんでもない素人の私の意見なんですが,**kwargs
って想定していないキーワードを突っ込んでも特にエラーが出ないんですね.結構危ない仕様なのではないだろうか……aspect_ratio
のスペルミスなども考えたんですが,うんともすんとも言わないから,aspect_ratio
というオプションを認識しているかどうかすらよく分かりませんでした.
##解決
aspect_ratioと画面サイズは違うとのこと.
from sympy.plotting import plot_parametric
from sympy import symbols, sin, cos, pi
t = symbols('t')
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = (8,8)
plot_parametric(cos(t), sin(t), (t, 0, 2*pi))
無事 $1:1$ で表示されました.@SaitoTsutomu 様,ありがとうございました.