我的 Streamlit 应用程序有以下箱线图:`
fig = px.box(df, x=x_column, y=y_column, color=x_column)
st.plotly_chart(fig,use_container_width=True)
我还没有找到一个优雅的解决方案来放大箱线图,并且只显示箱线图直到 IQR,从而隐藏箱线图中的异常值。异常值具有极值,这完全破坏了箱线图的呈现。如果未显示异常值,箱线图将再次可读。
有人知道我如何实现这一目标吗? 谢谢!
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
选项返回原始绘图。
您可以使用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()
不透明度 = 0
您可以根据 Hamzah 的回答确定 y_min 和 y_max。这样做的风险是它们可能不适合您的规模。如果您看到我使用的数据,就会发现将 y 轴限制为 253 会很奇怪,因为我们有 100 步。因此,我建议您通过检查来完成此操作,并设置最适合的值(在我的例子中为 300)。