如何为Matplotlib直方图设置x轴限制为数据系列的99.5百分位数?

3

我目前正在使用matplotlib制作一些直方图。问题是由于一个或两个异常值,我的整个图表非常小,几乎无法阅读,因为有两个单独的直方图被绘制。我遇到的问题是在大约99/99.5百分位处剔除异常值。我尝试过使用:

plt.xlim([np.percentile(df,0), np.percentile(df,99.5)]) 
plt.xlim([df.min(),np.percentile(df,99.5)])

看起来应该是一个简单的修复,但我缺少一些关键信息来实现它。任何建议将不胜感激,提前感谢。


你是想仅仅设置图形的视觉限制,还是在计算直方图之前就要排除异常值? - BrenBarn
只需设置视觉限制,但仍需要为多个图表保持动态。 - tylerswright
离群值相对于第99个百分位的位置将取决于数据的整体分布。此外,根据直方图箱如何划分数据,可能无法仅排除离群值。您需要展示更多代码和样本数据来说明您的情况。我认为在许多情况下,从直方图计算中较早地排除离群值更有意义。 - BrenBarn
所以我没有足够的声望来发布图片,但基本上它会缩小图表以显示每个数据点。对于我的目的来说,知道我有一个数据点偏离轨迹并不像分析图表的核心那样重要。我想知道如果在早期阶段排除它们是否更容易,正如你所提到的,那么在这条路上最容易的步骤是什么? - tylerswright
请查看刚刚添加的示例代码,让我知道是否足够。@BrenBarn - tylerswright
显示剩余2条评论
1个回答

2
为了限制焦点仅在值的中间99%,您可以像这样操作:
trimmed_data = df[(df.Column > df.Column.quantile(0.005)) & (df.Column < df.Column.quantile(0.995))]

然后您可以在 trimmed_data 上进行直方图操作。如何排除异常值更多是统计问题而不是 Python 问题,但基本上我在评论中建议的想法是使用您可以捍卫的任何方法清理数据集,然后仅对已经清理的数据集进行所有操作(图形、统计等),而不是尝试调整每个单独的图形以使其看起来正确,同时仍然存在异常值数据。


不确定变量'd'被设置为什么?这需要在一个系列上运行还是可以在整个数据框上实现?@BrenBarn - tylerswright
@tylerswright:抱歉,那些“d”应该是“df”。您只能在Series上计算百分位数,但是您可以使用这些百分位数来对Series或DataFrame进行子集划分。在我的示例中,我基于一列值(此处称为“Column”)的百分位数对DataFrame进行了子集划分。 - BrenBarn
除了 df.Columnquantile(0.005) 中缺少的点之外,其他都完美无缺。 - Ruli

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