2016-04-08 17 views
5

BenSemptom çiziminde, sabit en boy oranıyla nasıl bir çizim yapabilirim?

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

Ben bu

enter image description here

gibi bir rakam pencere açılır bu pasajı bir daire çizerseniz Şimdi boy oranı Bir elips gördükleri için ne bekliyordum değil bir daire yerine. Üstelik, penceresinin penceresinin (pencerenin sağ alt köşesini sürükleyerek) en boy oranını değiştirirsem, çizim alanının en/boy oranında da bir değişiklik yaparım ... Aşağıdaki resim köşeyi sürükledikten sonra aldığım şeydir. bir daire görmek için:

enter image description here

senin bir elips çizmek zaman axis equal ayarladığınızda Matlabda olsun gibi bir arsa, http://it.mathworks.com/help/matlab/creating_plots/aspect-ratio-for-2-d-axes.html bkz almak istiyorum

enter image description here

Neyi özlüyorum?

Jupyter kullanıyorum ve notebook sunucusunun sürümü 4.1.0 ve çalışıyor: Python 2.7.11 | Anaconda 2.5.0 (64-bit) | (varsayılan, 6 Aralık 2015, 18:08:32) [GCC 4.4.7 20120313 (Kırmızı Şapka 4.4.7-1)]

+0

ben 'window2010' ve' piton 2.7.x' ve 'denedi matplotlib en figürü ve eksen örneği ve arsa görünümünü değiştirmek için çağırır matplotlib kullanım standardı ayıklamak Sempati 1.0', sizinkiyle aynı sorun. Ben python 2.7' veya 'sympy 1.0' içinde bir' hata 'olup olmadığını merak ediyorum. Python 3.x'im yok, ama bu denemede denenmesi gerekiyor –

cevap

2

Bunun Sympy'nin kararlı API'sı kapsamında olup olmadığından emin değilim, ancak şunları yapabilirsiniz:

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) 

Bu veriyor: Tight Axis with equal aspect ratio

+0

Lütfen Python ortamınızın sürümünü yazabilir misiniz? Kodunuzu test ettim ve iliştirdiğinizden farklı bir arsa alıyorum. Teşekkür ederim. –

+0

@AlessandroJacopson matplotlib 1.5, ipython 2.4, Sympy 0.7.6.1 ve python 2.7/3.5 ile Debian/Sid kullanıyorum. Pylab ('platb' ipython kabuğunda veya --pylab parametresi olarak) kullanılırken kullanılmıyor, ancak kullanılmıyorken istenen sonuçları aldım. Olası nedenlerle ilgili biraz bilgim yok. Sympy 1.0 içinde – Dietrich

+0

çalışmıyor ... işlev show() plot.py çağrı self.plt.show() yerine self.fig.show(). Hızlı bir çözüm olarak/testi değiştirerek plt değerini beklenen sonuca getirin. – kimstik