2012-07-04 45 views
0

我有這個簡單的代碼:如何獲得matplotlib物理(沒有數據)的規模

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.backends.backend_pdf import PdfPages 
from matplotlib.patches import Ellipse 
PlotFileName="test.pdf" 
pdf = PdfPages(PlotFileName) 
fig=plt.figure(1) 
ax1=fig.add_subplot(111) 
plt.xlim([0,10]) 
plt.ylim([0,10]) 
ax1.plot([0,10],[0,10]) 
e=0.0 
theta=0 
maj_ax=2 
min_ax=maj_ax*np.sqrt(1-e**2) 
const=1 
ax1.add_artist(Ellipse((5, 5), maj_ax, const*min_ax, angle=theta, facecolor="green", edgecolor="black",zorder=2, alpha=0.5)) 
plt.grid() 
pdf.savefig(fig) 
pdf.close() 
plt.close() 

下面是它的外觀: enter image description here

正如你從代碼中看到,它應該是一個圓,但它不是!我已經將問題縮小到了第16行的const這個術語。我不想使用ax1.axis("equal"),因爲我的數據在垂直和水平方向上沒有相同的比例。任何人都可以告訴我,我可以問matplotlib來告訴我它使用的是什麼樣的寬高比,所以我可以正確設置const的術語,所以我最終有一個圓圈?

換句話說,我想知道水平軸與垂直軸「物理」長度的比例(例如,打印出的是什麼)。

我真的很感激任何建議,提前感謝

+0

正在使用'F = pylab.gcf()'和'DefSize = F.get_size_inches()'的最佳方式?以這種方式:寬高比爲:'DefSize [0]/DefSize [1]'。 – makhlaghi

回答

0

一種選擇是明確的定義數字的大小......你可能還需要如果您正在使用非默認設置來指定的插曲參數。根據不同的水平和垂直比例調整圖形和子圖參數。例如:

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.patches import Ellipse 

fig = plt.figure(figsize=(6,4)) 
fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9) 
ax1 = fig.add_subplot(111, xlim=(-2.5,12.5), ylim=(0,10)) 
ax1.plot((0,10), (0,10)) 
maj_ax, e, theta = 2, 0, 0 
min_ax = maj_ax * np.sqrt(1 - e**2) 
ax1.add_artist(Ellipse((5, 5), maj_ax, min_ax, angle=theta, 
         fc="green", ec="black", zorder=2, alpha=0.5)) 
plt.grid() 
plt.show()