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

如何在Python的Plotly Go子弹图中设置标记符号与标记文本?

解决思路与修正代码

你当前的代码未完全匹配标准子弹图的预期样式,核心问题出在仪表盘参数配置和元素展示逻辑上,以下是针对性的修正方案:

核心问题分析

  • steps的颜色设置未区分区间层级,导致达标区间的视觉对比不明显
  • 目标值(markers)缺少直观的可视化标记,仅通过delta显示参考值不够直观
  • 轴范围与你定义的bullet_data区间未完全对应

修正后的代码

import plotly.graph_objects as go

bullet_data = [
    {
        "title": "Revenue",
        "ranges": [150, 225, 300],  # 最低值、满意值、最大值
        "measures": [200],  # 当前值
        "markers": [250],  # 目标值
    }
]

fig = go.Figure()

fig.add_trace(go.Indicator(
    mode="number+gauge+delta",  # 同时显示数值、进度条、目标差值
    gauge={
        "shape": "bullet",
        "axis": {"range": [0, bullet_data[0]["ranges"][2]]},  # 轴范围匹配区间最大值
        "bar": {"color": "#1f77b4"},  # 当前值进度条颜色
        "steps": [
            {"range": [0, bullet_data[0]["ranges"][0]], "color": "#e0e0e0"},  # 最低区间(浅灰)
            {"range": [bullet_data[0]["ranges"][0], bullet_data[0]["ranges"][1]], "color": "#90ee90"},  # 满意区间(绿色突出)
            {"range": [bullet_data[0]["ranges"][1], bullet_data[0]["ranges"][2]], "color": "#ffcccb"},  # 最高区间(浅红)
        ],
        "threshold": {
            "line": {"color": "red", "width": 3},
            "thickness": 1,
            "value": bullet_data[0]["markers"][0]  # 用阈值线标记目标值
        }
    },
    value=bullet_data[0]["measures"][0],
    delta={"reference": bullet_data[0]["markers"][0], "position": "right"},
    domain={"x": [0.1, 1], "y": [0.2, 0.8]},
    title={"text": f"{bullet_data[0]['title']}<br><span style='font-size:0.8em'>2023 YTD</span>"},
))

fig.update_layout(height=250)  # 调整高度适配子弹图比例
fig.show()

关键调整点

  • 配置mode为number+gauge+delta,同时展示当前数值、进度条和与目标的差值
  • 用gauge.bar单独定义当前值的进度条颜色,与区间背景形成区分
  • 调整steps颜色,让满意区间通过绿色突出显示,符合子弹图的视觉逻辑
  • 将目标值绑定到threshold参数,显示为直观的红色竖线标记
  • 让轴范围匹配ranges的最大值,避免多余空白
  • 优化标题格式,添加副标题补充时间维度信息

内容的提问来源于stack exchange,提问作者Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:37:28