是否可以并排放置两个堆叠的条形图,每个条形图来自同一列?
这是我的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
我想要按字段排列的堆积条形图旁边的按问题排列的堆积条形图。
谢谢大家!
答案 0 :(得分:2)
有关如何使用提供的特定数据集制作条形图的示例,请查看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:添加命名迹线
如果要“拆开”条形,只需将条形模式更改为“分组”,如下所示:
layout = go.Layout(barmode='group', title = 'Stacked bar chart')
图5: