matplotlib:得到图的轴比

时间:2015-05-31 15:49:34

标签: python matplotlib

我需要自动为多个2D数据集生成散点图。

默认情况下,宽高比设置为ax.set_aspect(aspect='equal'),大部分时间都有效,因为x,y值在平方区域中或多或少地分布。

有时候,我会遇到一个数据集,当用equal比率绘制时,看起来像这样:

enter image description here

即:给定轴太窄。对于上图,轴大约为1:8。

在这种情况下,ax.set_aspect(aspect='auto')的宽高比会产生更好的情节:

enter image description here

现在,我不想将aspect='auto'设置为所有数据集的默认设置,因为使用aspect='equal'实际上是显示此类散点图的正确方法

我需要回归使用ax.set_aspect(aspect='auto') 仅用于上述等案例。

问题:如果使用aspect='equal',如果情节的宽高比太窄,有没有办法知道?就像获得绘制数据集的实际宽高比一样。

这样,基于这样的数字,我可以将宽高比调整为更健全的东西(即:auto或其他宽高比),而不是'equal'

2 个答案:

答案 0 :(得分:4)

这样的事应该做​​,

aspect = (max(x) - min(x)) / (max(y) - min(y))

答案 1 :(得分:2)

ax.get_data_ratio() 方法get_data_ratio提供了数据界限的宽高比

M = 4.0
ax.set_aspect('equal' if 1/M < ax.get_data_ratio() < M else 'auto')

例如:

max(y) == max(ax.get_ylim())

¹当轴在数据周围缩放时,这是@farenorth's answer的倒数,即ax.get_ybound,因为它是使用ax.get_xbound和{中的范围计算的{1}}。