Matplotlib:扩展轴以填充图形,在x和y上具有相同的比例

时间:2014-08-22 13:01:25

标签: python matplotlib

我分开了两件事。

figure.tight_layout 

将扩展我的当前轴

axes.aspect('equal')

将在x和y上保持相同的比例。

但是当我使用它们时,我得到方轴视图,我希望它能够扩展。 通过保持相同的比例,我的意思是在x和y轴上从0到1的距离相同。 有没有办法让它成真?保持相同的比例并扩展到完整的数字(不仅是一个正方形) 答案应该适用于自动缩放

2 个答案:

答案 0 :(得分:1)

可能没有那么笨拙的方式,但至少你可以手动完成。一个非常简单的例子:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([0,1],[1,0])
ax.set_aspect(1)
ax.set_xlim(0, 1.5)

创建

enter image description here

尊重宽高比。

如果您希望tight_layout提供自动缩放功能,那么您必须自己做一些数学运算:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([0,1],[1,0])
fig.tight_layout()

# capture the axis positioning in pixels
bb = fig.transFigure.transform(ax.get_position())
x0, y0 = bb[0]
x1, y1 = bb[1]
width = x1 - x0
height = y1 - y0

# set the aspect ratio 
ax.set_aspect(1)

# calculate the aspect ratio of the plot
plot_aspect = width / height

# get the axis limits in data coordinates
ax0, ax1 = ax.get_xlim()
ay0, ay1 = ax.get_ylim()
awidth = ax1 - ax0
aheight = ay1 - ay0

# calculate the plot aspect
data_aspect = awidth / aheight

# check which one needs to be corrected
if data_aspect < plot_aspect:
    ax.set_xlim(ax0, ax0 + plot_aspect * aheight)
else:
    ax.set_ylim(ay0, ay0 + awidth / plot_aspect)

当然,您可以按照您想要的任何方式设置xlimylim,例如,您可能希望在比例的任何一端添加等量的空格。

enter image description here

答案 1 :(得分:0)

对我而言有效的解决方案是致电

axis.aspect("equal")
axis.set_adjustable("datalim")

从文档中的this example被盗。

example image