通过仅显示胡须并隐藏异常值来放大Python中的绘图箱线图

问题描述 投票:0回答:2

我的 Streamlit 应用程序有以下箱线图:`

fig = px.box(df, x=x_column, y=y_column, color=x_column)    
st.plotly_chart(fig,use_container_width=True)

我还没有找到一个优雅的解决方案来放大箱线图,并且只显示箱线图直到 IQR,从而隐藏箱线图中的异常值。异常值具有极值,这完全破坏了箱线图的呈现。如果未显示异常值,箱线图将再次可读。

箱线图

所需的箱线图:

有人知道我如何实现这一目标吗? 谢谢!

python plotly boxplot outliers
2个回答
2
投票

plotly中没有预缩放选项,唯一的解决方案是计算Q1和Q3并设置y轴范围,如下所示:

import plotly.express as px
from scipy import stats

df = px.data.tips()
fig = px.box(df, y="total_bill")

arr = fig['data'][0]['y']

Q1 =  stats.scoreatpercentile(arr, 25)
Q3 =  stats.scoreatpercentile(arr, 75)

IQR = Q3 - Q1

Upper_fence = Q3 + (1.5 * IQR)
Lower_fence = Q1 - (1.5 * IQR)

fig.update_layout( 
    yaxis=dict(
        range=[Lower_fence,Upper_fence]
    ) 
)

fig.show()

缩放前:

添加缩放选项后:

您可以通过单击模式栏中的

Autoscale
选项返回原始绘图。


0
投票

您可以使用plotly.graph_objects 中的Box 并调整标记的不透明度。缺点是您必须仅显示箱线图,而不显示其侧面的点。这是代码:

import plotly.graph_objects as go

fig = go.Figure(go.Box(
y=y_column,
marker=dict(opacity=0),# set opacity to 0 (outliers become invisible)
))

fig.update_yaxes(range=[y_min, y_max]) # Set the y range
fig.show()

不透明度 = 1(默认):

不透明度 = 0

调整 y 范围。

您可以根据 Hamzah 的回答确定 y_min 和 y_max。这样做的风险是它们可能不适合您的规模。如果您看到我使用的数据,就会发现将 y 轴限制为 253 会很奇怪,因为我们有 100 步。因此,我建议您通过检查来完成此操作,并设置最适合的值(在我的例子中为 300)。

© www.soinside.com 2019 - 2024. All rights reserved.