Plotly: How to make stacked bar chart from single trace?(Plotly:如何从单条迹线制作堆积条形图?)
问题描述
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!
For an example on how to make a stacked bar chart with the specific dataset provided, take a look at the suggestion in Plotly-Dash: Want two stacked bar charts side by side from single df column. The following answer addresses how you can not make a stacked bar chart with a single trace. To show you why, I'll start with what may seem like redundant details. But hopefully everything will be clear in the end.
In plotly terms, trace is used to describe a graph object such as Scatter or Bar like in the snippet below.
Snippet 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()
If you look at the snippet above, you'll see that that is a bar chart with a single trace in the form of go.Bar(x=['CategoryA',....
Plot 1.1:
Now, how can we add something to make it a stacked chart? If you start out by adding an element to x like 'CategoryD', then nothing happens. And that's a bit interesting since you'd might expect an error message instead.
Plot 1.2: Added x value
Snippet 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()
But nothing happens before CategoryD has a corresponding y value like 15:
Plot 1.3: Added x and y value
Conclusion so far: Adding values to x and y will add another category on the x-axis and a value on the y-axis. As you can see, nothing is getting stacked here quite yet:
Snippet 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()
But what if you add a layout term with barmode='stack'?
Snippet 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()
Plot 2: barmode='stack'
I can understand anyone hoping that this would stack all data within a single trace, but plotly just isn't built that way. To get what you need, you'll have to add another trace using fig.add_trace(go.Bar()) or simply fig.add_bar().
Snippet 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()
Plot 3: Add trace
Notice that neither of the go.Bar() objects have had any name assigned to them, and that plotly by default names them trace 0 and trace 1. So I guess it's more correct to say that a trace contains or 'shows' a plotly graph object rather than calling them the same thing. If you'd like to specify other names, you can do so with, for example, name = 'segment 1' like this:
Snippet 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()
Plot 4: Add named traces
If you'd like to 'unstack' your bars, just change barmode to 'group' like this:
fig.update_layout(barmode='group'),
Plot 5:
这篇关于Plotly:如何从单条迹线制作堆积条形图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Plotly:如何从单条迹线制作堆积条形图?
基础教程推荐
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
