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

