我有这个简单的代码:
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()
以下是它的外观:
从代码中可以看出,它应该是一个圆圈,但事实并非如此!我已将问题缩小到第16行中的const
项。我不想使用ax1.axis("equal")
,因为我的数据在纵向和横向上没有相同的比例。任何人都可以告诉我如何让matplotlib告诉我它使用的宽高比是什么,所以我可以正确设置const
项,所以我到底有一个圆圈?
换句话说,我想知道水平轴与垂直轴“物理”长度的比例(例如,打印出来的内容)。
我非常感谢任何建议,提前谢谢
答案 0 :(得分: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()