You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:24:16