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

这是它的外观: 在此处输入图像描述

正如您从代码中看到的那样,它应该是一个圆圈,但事实并非如此!我已将问题缩小到第const16 行中的术语。我不想使用ax1.axis("equal"),因为我的数据在垂直和水平上没有相同的比例。谁能告诉我如何让 matplotlib 告诉我它使用什么纵横比,这样我就可以const正确设置这个术语,所以最后我有一个圆圈?

换句话说,我想知道水平轴与垂直轴“物理”长度的比率(例如,打印出来的内容)。

我真的很感激任何建议,在此先感谢

4

1 回答 1

0

一种选择是明确定义图形大小......如果您使用非默认设置,您可能还需要指定子图参数。根据需要为不相等的水平和垂直比例调整 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 回答