matplotlib 设置轴限制时保留填充

bqujaahr  于 2023-05-23  发布在  其他
关注(0)|答案(3)|浏览(130)

在pyplot中为axis设置xlim和ylim会删除填充。如何在不改变填充的情况下设置它们?
示例:

fig, ax = plt.subplots()
x = np.linspace(0, 200, 500)
ax.set_ylim(ymax=100)
line = ax.plot(x, data, '--', linewidth=2, label='foo bar')
plt.show()

在所示的图中,x轴将有一个填充,而y轴没有。如何使他们都有填充,而有我想要的ylim?

vcudknz3

vcudknz31#

Axes.set_ymarginAxes.set_ylim互斥。对轴设置限制将覆盖边距。
有两个选项可以设置边距(padding)。

a.使用边距

可以使用

ax.set_ymargin(0.1)   or   ax.margins(y=0.1)

其中0.1是两个轴端的10%裕度。(当然,x轴也是如此)。这里的缺点是余量始终是对称的。

B.使用限制

使用ax.set_ylim(0, 100)设置的限制并使其适应需要。
例如,如果data是以numpy数组形式绘制的数据,并且我们希望底部有10%的边距,顶部有40%的边距,则可以使用

ymin = data.min()-0.1*(data.max()-data.min())
ymax = data.max()+0.4*(data.max()-data.min())
ax.set_ylim((ymin, ymax))

当然,如果需要的话,同样可以简单地将ymax设置为ymax = 100

kuhbmx9i

kuhbmx9i2#

您可以修改ax.dataLim边界框并重新应用ax.autoscale_view()
之前:

fig, ax = plt.subplots()
x = np.linspace(0, 10, 11)
line = ax.plot(x, x, '--', linewidth=2, label='foo bar')

之后:

pts = ax.dataLim.get_points()  # numpy array [[xmin, ymin], [xmax, ymax]]
pts[1, 1] = 11  # new ymax
ax.dataLim.set_points(pts)
ax.autoscale_view()

xmjla07d

xmjla07d3#

在matplotlib 3.5中,我使用了如下自动缩放:

axs[row,column].plot(divs['Dividends'], c='red',linewidth=1, marker='.', mec='blue',mfc='blue')
axs[row,column].set_ylim(bottom = 0)        
axs[row,column].autoscale()

为我解决了这个问题。有关自动缩放的差异,请参见随附的图形图片。
使用.margins()和一个值或'tight=True'或.set_ymargin()似乎没有做任何事情,无论我用什么值来填充。
在我的例子中,当股息接近于零时,将下限或底部限制更改为<0会使零线沿y轴向上移动。
Graph with Autoscaling
Graph without Autoscaling

相关问题