【问题标题】:Plotly: Grouped and Stacked barchart, different colors for stacked bars?Plotly:分组和堆叠条形图,堆叠条的不同颜色?
【发布时间】:2021-02-25 16:41:15
【问题描述】:

我有分组和堆叠的条形图。现在我想为以不同颜色堆叠的值着色。我的情节目前看起来像这样(带有应该用不同颜色标记的部分的标记):

该组对应于一个类别,并且堆叠基于两个值列之间的增量(增量堆叠在较低值的顶部)。 我想将增量(即堆叠条的上部)着色为稍浅的颜色(此处:Cat1 为浅蓝色,Cat1 为浅红色)。 但是,我找不到这样做的合适选项。

我的数据如下所示:

import pandas as pd

data = [
    ["Station1", 2.5, 3.0, "Cat1"],
    ["Station1", 3.7, 4.2, "Cat2"],
    ["Station2", 1.7, 2.1, "Cat1"],
    ["Station2", 3.9, 4.0, "Cat2"],
]
df = pd.DataFrame(data, columns=["station", "val1", "val2", "category"])
df["delta"] = df["val2"] - df["val1"]

这是绘图功能:

import plotly.express as px

px.bar(df, x="station", y=["val1", "delta"], color="category", barmode="group").show()

如何以不同的方式为增量着色?解决方案也可以在情节上(不必情节表达)。 有没有办法手动计算delta 列?

【问题讨论】:

  • delta 可以是负数吗?
  • 不,delta 总是 >0
  • 好的,很好!然后我建议的方法就可以了!

标签: python plot plotly plotly-express


【解决方案1】:

我提出了一个可以很好地满足您的需求的建议。至少在视觉上与delta >=0 一样长。据我所知,分组和堆叠条形图仍然有点棘手。但是使用 px.Bar 构建两个不同的图形,然后在 go.Figure object() 中使用 fig._data 将它们组合起来,您可以构建这个:

正如您从代码中看到的那样,delta 没有被显式实现,而是在不透明条和非透明条之间直观地出现。如果这是你可以使用的东西,我会看看我是否可以在悬停信息中包含delta

完整代码:

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go

data = [
    ["Station1", 2.5, 3.0, "Cat1"],
    ["Station1", 3.7, 4.2, "Cat2"],
    ["Station2", 1.7, 2.1, "Cat1"],
    ["Station2", 3.9, 4.0, "Cat2"],
]
df = pd.DataFrame(data, columns=["station", "val1", "val2", "category"])
df["delta"] = df["val2"] - df["val1"]

fig1_data = px.bar(df, x="station", y=["val1"], color="category", barmode="group")._data
fig2_data = px.bar(df, x="station", y=['val2'], color="category", barmode="group")._data

fig1_data[0]['marker']['color'] = 'rgba(255,0,0,1)'
fig1_data[1]['marker']['color'] = 'rgba(0,0,255,1)'

fig2_data[0]['marker']['color'] = 'rgba(255,0,0,0.2)'
fig2_data[1]['marker']['color'] = 'rgba(0,0,255,0.2)'

dat = fig1_data+fig2_data
fig = go.Figure(dat)

fig3 = go.Figure(fig._data)
fig.update_layout(barmode='relative', title_text='Relative Barmode')
fig3.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 2017-11-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多