是否可以并排放置两个堆叠的条形图,每个条形图来自一个列?
这是我的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
我想在字段旁边的堆积条形图旁边显示字段的堆积条形图。
多谢你们!
有关如何使用提供的特定数据集制作堆积条形图的示例,请查看Plotly-Dash: Want two stacked bar charts side by side from single df column中的建议。以下答案解决了如何使用单个迹线制作堆积条形图的方法。为了向您展示原因,我将从看似多余的细节开始。但希望最终一切都清楚。
在情节方面,trace
是一个术语,用于描述graph object
,如Scatter
或Bar
,如下面的片段。
小片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:
现在,我们如何添加一些东西才能成为stacked chart
?如果你开始向x
添加'CategoryD'
元素,那么没有任何反应。这有点有趣,因为您可能会期待错误消息。
图1.2:添加了x值
但是在CategoryD
有一个像15
这样的相应y值之前没有任何反应:
图1.3:添加了x和y值
结论到目前为止:向x
和y
添加值将在x轴上添加另一个类别,在y轴上添加值。正如你所看到的,没有什么能在这里获得stacked
:
但是如果你用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'
我可以理解任何人希望这会将所有数据堆叠在一条轨迹中,但是看起来似乎并没有这样构建。为了得到你需要的东西,你必须添加另一个跟踪或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:添加跟踪
请注意,这两个go.Bar()
对象都没有为它们分配任何名称,并且默认情况下将它们命名为trace 0
和trace 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:添加命名跟踪
如果你想'卸下'你的酒吧,只需将barmode更改为'group',如下所示:
layout = go.Layout(barmode='group', title = 'Stacked bar chart')
图5: