如何在 Boxplot q1、q3、fences ... px.box 中显示文本值(不是悬停)?
How to show value in text (not hover) in Boxplot q1, q3, fences ... with px.box?
import plotly.express as px
px.box(df, x="people_num")
我可以将鼠标悬停以显示该值。
但是,我希望注释始终打开,因为我要导出为 PNG 以放入我的报告中。中位数、q1、q3、围栏、...
如何显示值?
解决方案:plotly.express 无法使注释始终开箱即用(没有 True/False 标志来打开/关闭)。您应该自己添加注释。
我认为在 Plotly 中没有办法做到这一点。您将需要重新计算这些值(因为我无法找到从 fig
对象访问它们的方法),然后使用注释添加它们。一个zip函数可以稍微整合一下代码。
注意:Plotly's linear method for quartile calculation, and pandas linear method 的四分位数计算似乎不会为 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()
import plotly.express as px
px.box(df, x="people_num")
但是,我希望注释始终打开,因为我要导出为 PNG 以放入我的报告中。中位数、q1、q3、围栏、...
如何显示值?
解决方案:plotly.express 无法使注释始终开箱即用(没有 True/False 标志来打开/关闭)。您应该自己添加注释。
我认为在 Plotly 中没有办法做到这一点。您将需要重新计算这些值(因为我无法找到从 fig
对象访问它们的方法),然后使用注释添加它们。一个zip函数可以稍微整合一下代码。
注意:Plotly's linear method for quartile calculation, and pandas linear method 的四分位数计算似乎不会为 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()