如何使用 px.box 在 Boxplot q1、q3、fences ... 中显示文本值(不是悬停)?

Hah*_*pro 3 plotly plotly-python

import plotly.express as px
px.box(df, x="people_num")
Run Code Online (Sandbox Code Playgroud)

我可以将鼠标悬停来显示该值。

但是,我希望注释始终处于打开状态,因为我将导出到 PNG 格式以放入我的报告中。中位数、q1、q3、栅栏、...

如何体现价值?

解决方案:plotly.express 无法使注释始终显示开箱即用(没有 True/False 标志来打开或关闭)。您应该自己添加注释。

Der*_*k O 5

我不相信 Plotly 有办法做到这一点。您将需要重新计算这些值(因为我无法找到从对象访问它们的方法fig),然后使用注释添加它们。zip 函数可以稍微整合一下代码。

注意:Plotly 用于四分位数计算的线性方法和pandas 用于四分位数计算的线性方法似乎不会为 Q1 和 Q3 产生完全相同的结果,但希望我的答案中的通用方法对您仍然有用。如果您不介意该解决方案不可概括,但您只需要一个带有标记值的箱线图,则可以直接将值及其相应的名称直接传递到zip([],[...])下面的代码块中。

import pandas as pd
import plotly.express as px

## create some random data that looks similar
df = pd.DataFrame({'people_num':[2,10,15,16,18,20,25,26,26,27,35,36,37,52]})
fig = px.box(df, x="people_num")

## loop through the values you want to label and add them as annotations
for x in zip(["min","q1","med","q3","max"],df.quantile([0,0.25,0.5,0.75,1]).iloc[:,0].values):
    fig.add_annotation(
        x=x[1],
        y=0.3,
        text=x[0] + ":" + str(x[1]),
        showarrow=False
        )

fig.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述