如何为Plotly箱线图添加顶部文本标签?
给Plotly箱线图批量添加顶部文本标签
需求与问题
需要给多个箱线图(示例3个,实际30+)顶部添加指定文本标签:第一个为apples,第二个bananas,第三个oranges。尝试过text参数但go.Box不支持该功能,且不愿逐个手动调用add_annotations处理大量标注。
原代码:
fig = go.Figure() fig.add_trace(go.Box(y=[ [ 0 ], [ 0 ], [ 0 ] ], name="Precompiled Quartiles")) fig.update_traces(q1=[ 1, 2, 3 ], median=[ 4, 5, 6 ], q3=[ 7, 8, 9 ], lowerfence=[-1, 0, 1], upperfence=[5, 6, 7]) fig.show()
解决方案
利用go.Scatter的文本模式批量生成标签,无需循环添加标注,完整代码如下:
import plotly.graph_objects as go # 定义标签列表(可直接扩展到30+个) labels = ["apples", "bananas", "oranges"] fig = go.Figure() # 添加箱线图轨迹 fig.add_trace(go.Box(y=[ [0], [0], [0] ], name="Precompiled Quartiles")) # 更新箱线图统计数据,单独提取upperfence用于计算文本位置 upperfence = [5, 6, 7] fig.update_traces(q1=[1, 2, 3], median=[4, 5, 6], q3=[7, 8, 9], lowerfence=[-1, 0, 1], upperfence=upperfence) # 批量添加顶部文本标签:使用scatter的text模式 text_y = [y + 0.5 for y in upperfence] # 添加偏移量避免文本与箱线图顶部重叠 fig.add_trace(go.Scatter( x=list(range(len(upperfence))), # 自动匹配每个箱线图的X轴位置 y=text_y, text=labels, mode="text", textposition="top center", # 文本居中对齐在顶部 showlegend=False, # 隐藏文本轨迹的图例 textfont=dict(size=12, color="black") # 自定义文本样式 )) fig.show()
关键说明:
x=list(range(len(upperfence)))自动匹配箱线图数量,无需硬编码X轴坐标text_y的偏移量可根据数据范围灵活调整,确保文本不遮挡箱线图showlegend=False避免文本轨迹干扰原有图例- 标签列表可直接扩展,支持30+个箱线图的批量标注
内容的提问来源于stack exchange,提问作者Cauder
相关产品推荐
相关产品推荐

