Python Plotly绘制分组柱状图时如何自定义图例为颜色分类
实现方案
你可以通过隐藏原有start/end trace的图例,额外新增3个仅用于图例展示的空trace实现需求,既保留原有分组柱状图的排版不会出现空白间隙,又能自定义图例为颜色含义说明。
完整可运行代码
import plotly.graph_objects as go # 示例数据 x = ["day"+str(i) for i in range(1,8)] starts = [10, 50, 70, 75, 20, 50, 90] ends = [95, 5, 80, 20, 50, 10, 75] starts_colors = ['green', 'orange', 'red', 'red', 'green', 'orange', 'red'] ends_colors = ['red', 'green', 'red', 'green', 'orange', 'green', 'red'] # 初始化画布 layout = go.Layout(showlegend=True) fig = go.Figure(layout=layout) # 添加原有起始值、结束值柱子,隐藏这两个trace的图例 fig.add_trace(go.Bar(x=x, y=starts, name = 'start', marker=dict(color=starts_colors), showlegend=False)) fig.add_trace(go.Bar(x=x, y=ends, name = 'end', marker=dict(color=ends_colors), showlegend=False)) # 新增3个无数据的空trace,仅用于展示颜色对应的图例说明 # 可根据你实际的数值分段规则修改name字段的内容 fig.add_trace(go.Bar(x=[], y=[], marker_color='green', name='低值(0-30)')) fig.add_trace(go.Bar(x=[], y=[], marker_color='orange', name='中值(31-60)')) fig.add_trace(go.Bar(x=[], y=[], marker_color='red', name='高值(61-100)')) fig.show()
原理说明
新增的3个trace没有绑定任何绘图数据,不会在画布的绘图区域渲染出任何柱子,只会在图例区域展示对应的颜色和自定义名称,完全不会影响原有分组柱状图的排版。如果需要调整图例的位置、大小等样式,可在go.Layout中新增legend参数自定义配置。
内容的提问来源于stack exchange,提问作者Tuck
相关产品推荐
相关产品推荐

