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

如何用Plotly在单张图中并列绘制两列数据的柱状图?

合并Plotly柱状图展示男女消费金额

我有一个记录各购物中心男性、女性消费金额的Pandas DataFrame,数据如下:

ShoppingMall   MaleSpends   FemaleSpends
0     XX             5600.20        4500.70
1     YY             9000.00        100000.00
2     zz             7809.45          5600.89

目前我能用Plotly分别绘制两个柱状图:

import plotly.express as px
fig1=px.bar(data,x='ShoppingMall',y='MaleSpends',barmode='group')
fig2=px.bar(data,x='ShoppingMall',y='FemaleSpends',barmode='group')

但我需要把这两个图合并到同一张图里,做成每个购物中心对应两个分组柱子(分别代表男、女消费)的样式。


解决方案

方法1:重塑数据后直接绘制(推荐)

通过pd.melt把宽格式数据转成长格式,让Plotly自动生成分组柱状图,这是最简洁的方式:

import pandas as pd
import plotly.express as px

# 定义原始数据
data = pd.DataFrame({
    'ShoppingMall': ['XX', 'YY', 'zz'],
    'MaleSpends': [5600.20, 9000.00, 7809.45],
    'FemaleSpends': [4500.70, 100000.00, 5600.89]
})

# 宽转长:将男女消费列转为分类列
melted_data = pd.melt(
    data,
    id_vars='ShoppingMall',
    value_vars=['MaleSpends', 'FemaleSpends'],
    var_name='消费群体',
    value_name='消费金额'
)

# 绘制分组柱状图
fig = px.bar(
    melted_data,
    x='ShoppingMall',
    y='消费金额',
    color='消费群体',
    barmode='group',
    title='各购物中心男女消费金额对比'
)
fig.show()

方法2:手动合并已有图表

如果不想修改数据结构,可以直接把第二个图表的轨迹添加到第一个图表中:

import pandas as pd
import plotly.express as px

# 定义原始数据
data = pd.DataFrame({
    'ShoppingMall': ['XX', 'YY', 'zz'],
    'MaleSpends': [5600.20, 9000.00, 7809.45],
    'FemaleSpends': [4500.70, 100000.00, 5600.89]
})

# 创建男性消费柱状图
fig = px.bar(data, x='ShoppingMall', y='MaleSpends', name='男性消费')
# 添加女性消费的柱状图轨迹
fig.add_trace(px.bar(data, x='ShoppingMall', y='FemaleSpends', name='女性消费').data[0])
# 设置分组模式和标题
fig.update_layout(barmode='group', title='各购物中心男女消费金额对比')
fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:52:38