首页 > 解决方案 > 将计数添加到 Plotly 箱线图

问题描述

我有一个相对简单的问题,但在网上找不到任何解决该问题的答案。从一个简单的箱线图开始:

import plotly.express as px
 
df = px.data.iris()

fig = px.box(
    df, x='species', y='sepal_length'
)

val_counts = df['species'].value_counts()

我现在想在val_counts图中添加(在这个数据集中,每个物种 50 个),最好是在以下任何一个地方:

我怎样才能做到这一点?

标签: pythonplotlyboxplot

解决方案


使用我在这个答案中提出的相同方法:Change Plotly Boxplot Hover Data

  • 计算箱线图计算的所有度量以及您要计算的附加度量
  • 将条形线迹覆盖在箱形图迹线上,因此悬停具有所需的所有措施
import plotly.express as px

df = px.data.iris()

# summarize data as per same dimensions as boxplot
df2 = df.groupby("species").agg(
    **{
        m
        if isinstance(m, str)
        else m[0]: ("sepal_length", m if isinstance(m, str) else m[1])
        for m in [
            "max",
            ("q75", lambda s: s.quantile(0.75)),
            "median",
            ("q25", lambda s: s.quantile(0.25)),
            "min",
            "count",
        ]
    }
).reset_index().assign(y=lambda d: d["max"] - d["min"])

# overlay bar over boxplot
px.bar(
    df2,
    x="species",
    y="y",
    base="min",
    hover_data={c:not c in ["y","species"] for c in df2.columns},
    hover_name="species",
).update_traces(opacity=0.1).add_traces(px.box(df, x="species", y="sepal_length").data)

在此处输入图像描述


推荐阅读