2016-04-08 19 views
5

私はsympyプロットでは、固定アスペクト比のプロットを得るにはどうすればよいですか?

from sympy import * 
x, y = symbols('x y')   
p1 = plot_implicit(Eq(x**2 +y**2, 1),aspect_ratio=(1.,1.)) 

は、私はこの1つ

enter image description here

などのFigureウィンドウを取得します。このスニペットの円をプロットした場合には、今のアスペクト比は、私が楕円を見るので、私は期待していたものではありません円の代わりにさらに、ウィンドウ(ウィンドウの右下隅をドラッグ)の縦横比を変更すると、プロットの縦横比も変更されます。次の画像は、角をドラッグした後のものですサークルを見るために:

enter image description here

私はあなたが楕円をプロットするときにaxis equalを設定するときには、MATLABでもらうようなプロットは、http://it.mathworks.com/help/matlab/creating_plots/aspect-ratio-for-2-d-axes.htmlを参照してください取得したいと思い

enter image description here

私は何が欠けていますか?

私はJupyterを使用しています。ノートブックサーバのバージョンは4.1.0で、Python 2.7.11 | Anaconda 2.5.0(64-bit)|を実行しています。 (デフォルト、Dec 6 2015、18:08:32)[GCC 4.4.7 20120313(Red Hat 4.4.7-1)]

+0

を私は 'window2010'と' Pythonの2.7.x'と 'に試してみましたsympy 1.0'、あなたと同じ問題。 'python 2.7'または' sympy 1.0'の中に 'bug 'があるのだろうかと思います。私は 'python 3.x'を持っていませんが、それを試してみる必要があります –

答えて

2

これはSympyの安定したAPIでカバーされているかどうかはわかりませんが、 matplotlibのの姿と軸インスタンスと、プロットの外観を変更するために呼び出すmatplotlibの使用基準を抽出します。

import matplotlib.pyplot as plt 
import sympy as sy 

x, y = sy.symbols('x y') 
p1 = sy.plot_implicit(sy.Eq(x**2 +y**2, 4)) 
fg, ax = p1._backend.fig, p1._backend.ax # get matplotib's figure and ax 

# Use matplotlib to change appearance: 
ax.axis('tight') # list of float or {‘on’, ‘off’, ‘equal’, ‘tight’, ‘scaled’, ‘normal’, ‘auto’, ‘image’, ‘square’} 
ax.set_aspect("equal") # 'auto', 'equal' or a positive integer is allowed 
ax.grid(True) 
fg.canvas.draw() 


plt.show() # enter matplotlib's event loop (not needed in Jupyter) 

これが与える: Tight Axis with equal aspect ratio

+0

あなたのPython環境のバージョンを書いてもらえますか?私はあなたのコードをテストし、あなたが添付したものとは異なるプロットを取得します。ありがとうございました。 –

+0

@AlessandroJacopson私はDebian/Sidをmatplotlib 1.5、ipython 2.4、Sympy 0.7.6.1、python 2.7/3.5で使用しています。私はそれをreranし、pylab(ipythonシェルで '%pylab'またはパラメータとして--pylabを使用するときに望ましい結果を得ましたが、使用しないときはそうではありません)。私は起こりうる原因については少しわかりません。 – Dietrich

+0

のsympy 1.0で動作しません... function show()は、plot.pyでself.plt.show()を呼び出す代わりにself.fig.show()を呼び出します。 pltをfigに置き換えると、予想される結果が得られます。 – kimstik

関連する問題