Plotly:如何从单一迹线制作堆积条形图?

问题描述 投票:4回答:1

是否可以并排放置两个堆叠的条形图,每个条形图来自一个列?

这是我的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

我想在字段旁边的堆积条形图旁边显示字段的堆积条形图。

多谢你们!

python plotly
1个回答
2
投票

有关如何使用提供的特定数据集制作堆积条形图的示例,请查看Plotly-Dash: Want two stacked bar charts side by side from single df column中的建议。以下答案解决了如何使用单个迹线制作堆积条形图的方法。为了向您展示原因,我将从看似多余的细节开始。但希望最终一切都清楚。


在情节方面,trace是一个术语,用于描述graph object,如ScatterBar,如下面的片段。

小片1:

import plotly.plotly as py
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
init_notebook_mode(connected=True)

data = [go.Bar(
            x=['CategoryA', 'CategoryB', 'CategoryC'],
            y=[20, 14, 23]
    )]

iplot(data)

如果你看一下上面的代码片段,你会发现这是一张带有go.Bar(x=['CategoryA',...形式的单一痕迹的条形图。

情节1.1:

enter image description here

现在,我们如何添加一些东西才能成为stacked chart?如果你开始向x添加'CategoryD'元素,那么没有任何反应。这有点有趣,因为您可能会期待错误消息。

图1.2:添加了x值

enter image description here

但是在CategoryD有一个像15这样的相应y值之前没有任何反应:

图1.3:添加了x和y值

结论到目前为止:向xy添加值将在x轴上添加另一个类别,在y轴上添加值。正如你所看到的,没有什么能在这里获得stacked

enter image description here

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


摘录2:

import plotly.plotly as py
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
init_notebook_mode(connected=True)

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

layout = go.Layout(barmode='stack', title = 'Stacked bar chart')

fig = go.Figure(data=data, layout=layout)
iplot(fig)

图2:barmode ='stack'

enter image description here

我可以理解任何人希望这会将所有数据堆叠在一条轨迹中,但是看起来似乎并没有这样构建。为了得到你需要的东西,你必须添加另一个跟踪或go.Bar()对象,如下所示:

代码段3:

import plotly.plotly as py
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
init_notebook_mode(connected=True)

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

       go.Bar(x=['CategoryA', 'CategoryB', 'CategoryC', 'CategoryD'],
               y=[5, 14, 4, 20])]

layout = go.Layout(barmode='stack', title = 'Stacked bar chart')

fig = go.Figure(data=data, layout=layout)
iplot(fig)

图3:添加跟踪

enter image description here

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

小片4:

import plotly.plotly as py
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
init_notebook_mode(connected=True)

data = [go.Bar(x=['CategoryA', 'CategoryB', 'CategoryC', 'CategoryD'],
               y=[20, 14, 23, 15], name = 'segment 1'),

       go.Bar(x=['CategoryA', 'CategoryB', 'CategoryC', 'CategoryD'],
               y=[5, 14, 4, 20], name = "segment 2")]

layout = go.Layout(barmode='stack', title = 'Stacked bar chart')

fig = go.Figure(data=data, layout=layout)
iplot(fig)

图4:添加命名跟踪

enter image description here

如果你想'卸下'你的酒吧,只需将barmode更改为'group',如下所示:

layout = go.Layout(barmode='group', title = 'Stacked bar chart')

图5:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.