matplotlib 如何计算最小/最大轴值?或者如何在设置限制时自动添加 matplotlib 边距
How does matplotlib calculate the min / max axis values? Or how to automatically add the matplotlib margin when setting the limits
当我们绘制曲线时,matplotlib 会自动为最小值和最大值添加一些偏移量。 matplotlib如何计算这个'offset'?
例如
plt.plot(range(0,10))
plt.ylim()
给出 y
限制 (-0.45, 9.45)
。
而
plt.plot(np.array(range(1,10))/100)
plt.ylim()
给出 y
限制 (0.006, 0.094)
。
毫不奇怪,当我设置 axis
plt.plot(range(0,10))
plt.ylim(0,9)
plt.ylim()
我得到 (0.0, 9.0)
。
我经常想设置限制,但仍然希望限制有一些余量,例如当限制在一条线上时,这条线应该很好地显示。
当然我可以在设置 y
限制时添加一些分数,但这总是需要一些调整。我想知道是否有更聪明的方法来做到这一点。
根据我在源代码中可以找到的内容,边距设置为数据范围的一小部分 axes.xmargin
/axes.ymargin
parameters, but the computation is rather more involved。
根据@DavidG 的评论,我们使用边距 plt.margins()
或 ax.margins()
.
添加正确的金额
以问题中给出的例子为例:
d = range(0, 10)
plt.plot(d)
ymarg = (max(d) - min(d)) * plt.margins()[1]
plt.ylim(min(d) - ymarg, max(d) + ymarg)
plt.ylim()
其中 returns (-0.45, 9.45)
.
当我们绘制曲线时,matplotlib 会自动为最小值和最大值添加一些偏移量。 matplotlib如何计算这个'offset'?
例如
plt.plot(range(0,10))
plt.ylim()
给出 y
限制 (-0.45, 9.45)
。
而
plt.plot(np.array(range(1,10))/100)
plt.ylim()
给出 y
限制 (0.006, 0.094)
。
毫不奇怪,当我设置 axis
plt.plot(range(0,10))
plt.ylim(0,9)
plt.ylim()
我得到 (0.0, 9.0)
。
我经常想设置限制,但仍然希望限制有一些余量,例如当限制在一条线上时,这条线应该很好地显示。
当然我可以在设置 y
限制时添加一些分数,但这总是需要一些调整。我想知道是否有更聪明的方法来做到这一点。
根据我在源代码中可以找到的内容,边距设置为数据范围的一小部分 axes.xmargin
/axes.ymargin
parameters, but the computation is rather more involved。
根据@DavidG 的评论,我们使用边距 plt.margins()
或 ax.margins()
.
以问题中给出的例子为例:
d = range(0, 10)
plt.plot(d)
ymarg = (max(d) - min(d)) * plt.margins()[1]
plt.ylim(min(d) - ymarg, max(d) + ymarg)
plt.ylim()
其中 returns (-0.45, 9.45)
.