使用している SymPy のバージョンによって異なります。
最新バージョン(0.7.2)では、何でもプロットできることが保証され、バックエンドのmatplotlibとして使用できるプロットモジュールがすでにあります。
古いバージョンlambdify
では、numpy で使用される高速な数値関数を返すハック的でほとんど壊れたヘルパー関数を使用するオプションがあります。ただし、自明でない式では機能しません。
以下に、0.7.2 でプロッティング モジュールを使用する方法を説明します。
plot
のように呼び出すだけp = plot(expression, (var, start, stop))
です。持っている場合はmatplotlib
、それを直接使用します。
- 派手なものが必要な場合は、次の
matplotlib
図を抽出しますf = p._backend.fig
。
- SymPy のことは気にしないでください。残りの作業は にあります
matplotlib
。やりたいことは何でもできます。
SymPy のプロット モジュールの背後にある考え方は、可能な式を評価できるようにすることであり、matplotlib のようなプロット ライブラリを再実装することではありません。したがってsympy.plotting.plot
、評価に使用して、matplotlib で派手なサブプロット変換を行うだけです。
sympy プロット モジュールを使用すると、ハック的なソリューションよりも他の利点があります。不連続性の検出と適応サンプリング、関数に応じた色付け、病理学的に複雑な記号式の評価 (遅いですが)。
そして明らかに、ドキュメントを確認してください。それらは素晴らしいものではありませんが、多くの質問がそこで回答されています: http://docs.sympy.org/0.7.2/modules/plotting.html sympy のサンプル フォルダーにあるノートブックも確認してください。
編集して、いくつかの追加の質問に対処します。
SymPy のプロット モジュールにはサブプロットの概念はありません。上で述べたように、SymPy は のようなモジュールを再実装しようとmatplotlib
しているのではなく、別のモジュール内で簡単に使用するために必要なツールを提供しようとしています (モジュール間のインターフェースは、多くの小さなサブモジュールを含む大きなプロジェクトよりも優れています)。
2 つの異なる sympy プロットから matplotlib に 2 つのサブプロットを持つ 1 つの Figure を作成するには、次のようにします (matplotlib は Figure のマージをサポートしていないため、これは醜いハックです)。
sympy_p1 = sympy.plot(foo)
sympy_p2 = sympy.plot(bar)
matplotlib_fig = plt.figure()
sp1 = matplotlib_fig.add_subplot(121)
sp2 = matplotlib_fig.add_subplot(122)
sp1.add_collection(sympy_p1._backend.ax.get_children()[appropriate_index])
sp2.add_collection(sympy_p2._backend.ax.get_children()[appropriate_index])
matplotlib_fig.show()
sympy プロットを更新するには (サブプロットの作成ではなく、新しい式を追加するだけです)、 を使用しますsympy_p1.append(sympy_p2)
。これにより、とsympy_p1
の両方のプロットが含まれます( 2 つのサブプロットではなく、両方の式を持つ 1 つのプロット)。foo
bar
sympy.plot(..., show=False)
場合によっては使いたくなるかもしれません。