如何使用plotly.express绘制带分类直方图与求和折线的组合图表
完全可以实现,你需要的「年度分类直方图+年度总和折线」的组合图表可以通过plotly多图层叠加的方式完成,具体实现方法如下:
核心实现思路
- 先完成数据预处理:分别统计两个维度的数据,一是每个年份下各个类别的取值(供直方图使用),二是每个年份所有类别的取值总和(供折线图使用)
- 绘图时可以先用
plotly.express生成分类直方图的基础画布,再通过add_trace()方法追加折线图的轨迹,两个轨迹可以共用Y轴,也可根据数值差异配置双Y轴
可运行示例代码
import plotly.express as px import plotly.graph_objects as go import pandas as pd # 示例数据构造,可替换为你的实际数据 df = pd.DataFrame({ '年份': [2018,2018,2018,2019,2019,2019,2020,2020,2020], '类别': ['A类','B类','C类']*3, '取值': [120,200,150,180,220,170,210,250,200] }) # 计算每年所有类别取值总和 year_sum = df.groupby('年份')['取值'].sum().reset_index() # 生成分组直方图基础图 fig = px.histogram(df, x='年份', y='取值', color='类别', barmode='group') # 追加总和折线轨迹 fig.add_trace( go.Scatter( x=year_sum['年份'], y=year_sum['取值'], mode='lines+markers', name='年度总和', line=dict(color='red', width=3) ) ) # 调整图表布局 fig.update_layout( title='年度分类取值分布及总和趋势', xaxis_title='年份', yaxis_title='取值', legend_title='指标类型' ) fig.show()
补充调整说明
- 如果你需要直方图是堆叠模式而非分组模式,只需要把
px.histogram中的barmode参数改为stack即可 - 如果分类取值和年度总和的数值区间差距较大,可以配置双Y轴,将折线图绑定到右侧Y轴,修改对应配置即可:
# 折线轨迹新增yaxis参数绑定到第二Y轴 go.Scatter(..., yaxis='y2') # 布局新增右侧Y轴配置 fig.update_layout( yaxis2=dict( title='年度总和', overlaying='y', side='right' ) )
内容的提问来源于stack exchange,提问作者what_456
相关产品推荐
相关产品推荐

