0

私はこの簡単なコードを持っています:

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()

これがどのように見えるかです: ここに画像の説明を入力

コードからわかるように、円である必要がありますが、そうではありません。const問題を16 行目の用語に絞り込みました。ax1.axis("equal")データの縦と横の縮尺が同じでないため、使用したくありません。const最後に円ができるように用語を正しく設定できるように、使用しているアスペクト比をmatplotlibに教えてもらう方法を誰か教えてもらえますか?

つまり、横軸と縦軸の「物理的な」長さの比率 (たとえば、出力されるもの) を知りたいのです。

事前に感謝します。

4

1 に答える 1

0

1 つのオプションは、図のサイズを明示的に定義することです...デフォルト以外の設定を使用している場合は、サブプロット パラメーターも指定する必要がある場合があります。水平方向と垂直方向のスケールが等しくない場合は、必要に応じて figsize と subplot パラメーターを調整します。例えば:

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()
于 2012-07-05T18:29:31.237 に答える