【问题标题】:matplotlib.pyplot, preserve aspect ratio of the plotmatplotlib.pyplot,保留绘图的纵横比
【发布时间】:2010-05-29 11:48:15
【问题描述】:

假设我们有一个多边形坐标为polygon = [(x1, y1), (x2, y2), ...],下面的代码显示多边形:

import matplotlib.pyplot as plt
plt.fill(*zip(*polygon))
plt.show()

默认情况下,它会尝试调整纵横比以使多边形(或任何其他图表)适合窗口内,并自动更改它以使其即使在调整大小后也适合。这在许多情况下都很棒,除非您尝试从视觉上估计图像是否失真。如何将宽高比固定为严格 1:1?

(不确定“纵横比”是否在这里是正确的术语,所以如果不是 - 我需要 X 和 Y 轴都具有 1:1 比例,以便 X 和 Y 上的 (0, 1)占用完全相同的屏幕空间。无论我如何调整窗口大小,我都需要保持 1:1。)

【问题讨论】:

标签: python matplotlib


【解决方案1】:

'缩放'使用 plt

最好的就是使用:

 plt.axis('scaled')

正如索尔洛·卡斯特罗所说。因为使用 equal 你不能改变一个轴限制而不改变另一个,所以如果你想适应所有非平方数字,你将有很多空白。

相等

缩放

'equal' 使用 ax

或者,您可以使用axes class

fig = plt.figure()
ax = figure.add_subplot(111)
ax.imshow(image)
ax.axes.set_aspect('equal')

【讨论】:

  • 这正是我想要的。我认为这个答案绝对值得更多的支持。
【解决方案2】:

对使用有帮助吗:

plt.axis('equal')

【讨论】:

  • 你也可以使用plt.axis('scaled')
  • 我不明白为什么,但与scaled 设置相反,当我在axis('equal') 之后更改ylimxlim 时,刻度大小变为不等 ,甚至我的散点图中的一些数据也被裁剪掉了......
【解决方案3】:

我敢肯定,有一种方法可以将它直接设置为你的 plot 命令的一部分,但我不记得这个技巧了。要做到这一点,您可以使用当前轴并使用“set_aspect('equal')”设置它的纵横比。在您的示例中:

import matplotlib.pyplot as plt
plt.fill(*zip(*polygon))
plt.axes().set_aspect('equal', 'datalim')
plt.show()

我一直在使用它,它来自 matplotlib 网站上的示例。

【讨论】:

  • 也可以试试pylab.gca().set_aspect('equal', 'box')。 'box' 调整 both 的轴限制(例如轮廓图周围没有空白)。 'datalim' 仅调整其中一个限制(仅 x 或 y 空白消失)。对于异国情调的共享轴,还有“盒子强制”。
【解决方案4】:

更好的plt.axis('scaling'),如果你想用xlim()ylim()修改坐标轴,效果会更好。

【讨论】:

  • 我认为它的意思是说'scaled'。其他答案中已经提到过。
猜你喜欢
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 2013-05-01
  • 2017-11-11
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多