如何在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
相关产品推荐
相关产品推荐

