在matplotlib中设置坐标轴限制,但在这些限制内自动缩放

3
在matplotlib中,是否可以设置轴的最大和最小值,但当值远小于这些限制时自动缩放?
例如,我想要一个百分比变化的图表在-100和100之间限制,但我的许多图表将在-5和5之间。 当我使用ax.set_ylim(-100,100)时,此图表非常不清晰。
我想我可以使用类似ax.set_ylim(max((-100,data-n)),min((100,data+n)))的东西,但是否有更内置的方法来实现这一点?

不,没有内置的方法来检测比例尺的异常值。要么你设置限制,要么你不设置。 (唯一的例外是,你可以设置其中一个限制,并让另一个自动缩放,但在这种情况下没有用处。) - ImportanceOfBeingErnest
3个回答

1
如果您想去除极端异常值,可以使用numpy quantile函数,找到数据中的前0.001%和后99.999%。
near_min = np.quantile(in_data, 0.0001)
near_max = np.quantile(in_data, 0.9999)
ax.set_ylim(near_min, near_max)

根据您删除的数据量,您需要调整分位数。您可能需要进行一些测试,以确定near_min和true min之间的差异是否显著。


抱歉,我的链接无法使用:分位数函数 - Robert King
1
我喜欢这个想法,但不幸的是对于我的数据,我无法确定使用任何一定百分比的数据集是否能捕获所有的异常值。 - BHC

1
正如ImportanceOfBeingErnest所指出,目前没有对这个功能的支持。最终,我只是使用了我的原始想法,但通过最大值和最小值的比例来缩放它,以给人自动缩放的印象。
ax.set_ylim(max((-100, data_min+data_min*0.1)), min((100, data_max+data_max*0.1)))

在我的情况下,这是真的

data_min <= 0, data_max >= 0

0
为什么不在每次更新绘图时基于数据范围设置轴限制呢?
ax.set_ylim(min(data), max(data))

或者检查数据范围是否低于某个阈值,然后设置轴限制。

if min(abs(data)) < thresh:
    ax.set_ylim(min(data), max(data))

我想在极端异常值的情况下将轴限制在某个水平线上。如果我使用最小值和最大值,而存在一个100000的值,那么图表的其余部分将毫无意义。 - BHC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接