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

Plotly设置barmode为group后柱状图仍堆叠问题求助

问题:Plotly Express分组柱状图(barmode="group")未生效

我希望为每种fruit将total和available的柱状图并排显示。以下是我使用的数据:

import plotly.express as px

data_frame = {
    "fruits": ["orange", "apple", "banana", "cherry"],
    "total": [10, 20, 30, 25],
    "available": [7, 10, 27, 15],
}

我使用plotly.express编写了如下代码:

fig = px.bar(
    data_frame,
    x="fruits",
    y=["total", "available"],
    color="fruits",
    barmode="group", # 未生效
)

fig.show()

但柱状图仍以stack模式显示,请问我遗漏了什么?


解决方案

问题核心在于**color="fruits"**参数的冲突:当同时指定y=["total", "available"](多Y轴系列)和color="fruits"时,Plotly会将每个水果的两个数据系列(total/available)按水果维度堆叠,而非按数据系列分组并排。

要实现每种水果的total和available柱状图并排,可按以下两种方式修改:

方式一:直接调整参数(推荐)

移除color="fruits",改用color区分total和available系列,保留barmode="group":

import plotly.express as px

data_frame = {
    "fruits": ["orange", "apple", "banana", "cherry"],
    "total": [10, 20, 30, 25],
    "available": [7, 10, 27, 15],
}

fig = px.bar(
    data_frame,
    x="fruits",
    y=["total", "available"],
    barmode="group",
    # 可选:自定义两个系列的颜色
    color_discrete_map={"total": "#FFA500", "available": "#2E8B57"}
)

fig.show()

方式二:转换数据格式(保留按水果配色)

如果需要保留按水果区分颜色的需求,需先将宽格式数据转换为长格式,再绘图:

import plotly.express as px
import pandas as pd

data_frame = {
    "fruits": ["orange", "apple", "banana", "cherry"],
    "total": [10, 20, 30, 25],
    "available": [7, 10, 27, 15],
}

# 转换为长格式数据
df_long = pd.melt(data_frame, id_vars="fruits", var_name="type", value_name="count")

fig = px.bar(
    df_long,
    x="fruits",
    y="count",
    color="fruits",
    barmode="group",
    # 按数据系列分面,也可改为color="type"区分系列
    facet_col="type"
)

fig.show()

内容的提问来源于stack exchange,提问作者Minux-Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:43:33