【发布时间】:2021-06-22 14:08:07
【问题描述】:
是否可以创建一个被 Axes 自动缩放器忽略的绘图对象?
我经常需要添加垂直线,或对绘图区域进行着色以显示所需的数据范围(作为查看器的参考框架),但随后我必须设置轴自动缩放 x/ylimits回到它们之前的位置 - 或将线条/阴影截断到当前轴限制或各种其他 fandangos。
如果这些着色器/垂直线充当绘图上的“背景”对象,被自动缩放器忽略,那么只有我的真实数据会影响自动缩放。
这是一个例子: 这个图是真实世界的数据,我想看看数据是否每天都在期望的范围内。
我想在 -50 nm ≤ Y ≤ +50 nm 的范围内对第 3 轴图进行着色。 我很想从 -50 --> +50nm 添加一个巨大的半透明矩形,但让自动缩放忽略它。 例如。像这样(我在绘图程序中手动添加了红色阴影):
另外,您可以看到我已经使用这样的代码手动添加了垂直线(我真的应该只使用垂直网格线位置...):
ax1.set_ylim(ymin, ymax)
ax1.vlines( self.Dates , color="grey", alpha=0.05, ymin=ax1.get_ylim()[0], ymax=ax1.get_ylim()[1] )
您可以在第 2 和第 3 轴中看到,VLine 将 AutoScaling 向外推,所以现在 VLine 和 Axis 之间存在间隙。目前我需要确定调用fig.tight_layout() 和ax2/ax3.plot() 的顺序,或者转换为手动设置X-Tick 位置/网格线等-但如果这些VLines 甚至不被视为数据,那就更容易了,所以自动缩放忽略了它们。
是否可以自动缩放“忽略”某些对象?
【问题讨论】:
-
axvlines 怎么样?
-
这是一个关于如何在自动缩放期间忽略对象的更一般性问题 - 这些图只是随机示例,但我经常在各种项目中遇到这种需求。
-
在这种情况下,我真的应该用自定义网格线替换
vlines,但对矩形没有帮助。我想知道是否有办法让自动缩放器忽略某些对象(尤其是待处理的矩形)。 -
我无法重现:如果我在创建
vlines之前使用ax.set_ylim(ymin, ymax),则绘图限制不会改变。 -
也许阻止艺术家影响限制的一种方法是将他们的
sticky_edgesx 和 y 数组设置为不会影响自动缩放的东西? matplotlib.org/stable/api/_as_gen/…
标签: python matplotlib plot scale axes