6

Is it possible to have two stacked bar charts side by side each of them coming from a single column?

Here's my df:

Field       Issue

Police      Budget cuts
Research    Budget cuts
Police      Time consuming
Banking     Lack of support
Healthcare  Lack of support
Research    Bureaucracy
Healthcare  Bureaucracy
Banking     Budget cuts

I want a stacked bar chart of Field next to a stacked bar chart of issues by field.

Thanks guys!

4

1 回答 1

6

有关如何使用提供的特定数据集制作堆叠条形图的示例,请查看Plotly-Dash 中的建议:希望两个堆叠条形图并排从单个 df 列。以下答案说明了如何无法制作带有单个迹线的堆积条形图。为了说明原因,我将从看似多余的细节开始。但希望最后一切都会清楚。


在情节方面,trace用于描述下面片段中的graph object诸如此类。ScatterBar

片段 1.1:

import plotly.graph_objs as go
fig = go.Figure(go.Bar(x=['CategoryA', 'CategoryB', 'CategoryC'],
                       y=[20, 14, 23]))
fig.update_layout(template = 'plotly_dark').show()

如果您查看上面的代码片段,您会看到这一个条形图,其中包含go.Bar(x=['CategoryA',....

情节 1.1:

在此处输入图像描述

现在,我们如何添加一些东西来使它成为stacked chart? 如果您从向xlike添加元素开始'CategoryD',则不会发生任何事情。这有点有趣,因为您可能会期待一条错误消息。

图 1.2:增加的 x 值

在此处输入图像描述

片段 1.2

import plotly.graph_objs as go
fig = go.Figure(go.Bar(x=['CategoryA', 'CategoryB', 'CategoryC', 'CategoryD'],
                       y=[20, 14, 23]))
fig.update_layout(template = 'plotly_dark').show()

但是之前没有任何事情发生,CategoryD具有相应的 y 值,例如15

图 1.3:添加了 x 和 y 值

到目前为止的结论:添加值x并将y在 x 轴上添加另一个类别并在 y 轴上添加一个值。如您所见,目前还没有什么进展stacked

在此处输入图像描述

片段 1.3:

import plotly.graph_objs as go
fig = go.Figure(go.Bar(x=['CategoryA', 'CategoryB', 'CategoryC', 'CategoryD'],
                       y=[20, 14, 23, 15]))
fig.update_layout(template = 'plotly_dark').show()

但是如果你添加一个布局术语barmode='stack'呢?


片段 2:

import plotly.graph_objs as go

fig = go.Figure(go.Bar(x=['CategoryA', 'CategoryB', 'CategoryC', 'CategoryD'],
                       y=[20, 14, 23, 15]))

fig.update_layout(barmode='stack',
                  title = 'Stacked bar chart',
                  template = 'plotly_dark').show()

情节 2: barmode='stack'

在此处输入图像描述

我可以理解任何希望这会将所有数据堆叠在一个跟踪中的人,但 plotly 并不是那样构建的。要获得所需的内容,您必须使用fig.add_trace(go.Bar())或添加另一个跟踪simply fig.add_bar()

片段 3:

import plotly.graph_objs as go
fig = go.Figure(go.Bar(x=['CategoryA', 'CategoryB', 'CategoryC', 'CategoryD'],
                       y=[20, 14, 23, 15]))
fig.add_bar(x=['CategoryA', 'CategoryB', 'CategoryC', 'CategoryD'],
            y=[5, 14, 4, 20])
fig.update_layout(barmode='stack',
                  title = 'Stacked bar chart!',
                  template = 'plotly_dark').show()

情节 3:添加跟踪

在此处输入图像描述

请注意,这两个go.Bar()对象都没有分配任何名称,并且默认情况下将它们命名为trace 0trace 1。所以我想说一个跟踪包含或“显示”一个绘图对象而不是把它们称为相同的东西更正确。如果您想指定其他名称,您可以这样做,例如,name = 'segment 1'如下所示:

片段4:

import plotly.graph_objs as go
fig = go.Figure(go.Bar(x=['CategoryA', 'CategoryB', 'CategoryC', 'CategoryD'],
                       y=[20, 14, 23, 15],
                       name = 'segment 1'))
fig.add_bar(x=['CategoryA', 'CategoryB', 'CategoryC', 'CategoryD'],
            y=[5, 14, 4, 20],
            name = 'segment 2')
fig.update_layout(barmode='stack',
                  title = 'Stacked bar chart!',
                  template = 'plotly_dark').show()

情节 4:添加命名痕迹

在此处输入图像描述

如果您想“取消堆叠”您的条形图,只需将 barmode 更改为'group'如下所示:

fig.update_layout(barmode='group'),

情节5:

在此处输入图像描述

于 2019-03-20T12:08:22.570 回答