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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:36:00