[英]Stacked bar plot in python / plotly (express): grouping / ordering of bars
[英]How to add a line plot on top of a stacked bar plot in plotly express in python
我有以下 dataframe:
import pandas as pd
foo = pd.DataFrame({'week': [1,2,3,4,5,6,7,8],
'n': [20,20,20,18,18,10,10,5]})
foo['var_1'] = foo['week'] * 10
foo['var_2'] = 100 - foo['var_1']
foo_m = foo.melt(id_vars=['week', 'n'])
foo_m['n_perc'] = foo_m['n'] / foo_m['n'].max() * 100
foo_m
week n variable value n_perc
0 1 20 var_1 10 100.0
1 2 20 var_1 20 100.0
2 3 20 var_1 30 100.0
3 4 18 var_1 40 90.0
4 5 18 var_1 50 90.0
5 6 10 var_1 60 50.0
6 7 10 var_1 70 50.0
7 8 5 var_1 80 25.0
8 1 20 var_2 90 100.0
9 2 20 var_2 80 100.0
10 3 20 var_2 70 100.0
11 4 18 var_2 60 90.0
12 5 18 var_2 50 90.0
13 6 10 var_2 40 50.0
14 7 10 var_2 30 50.0
15 8 5 var_2 20 25.0
我正在使用以下代码创建堆叠条 plot:
import plotly.express as px
px.bar(foo_m, x='week', y='value', color='variable')
我想在这个堆叠条 plot 的顶部添加这一行 plot:
px.line(foo_m[['week', 'n_perc']].drop_duplicates(), x='week', y='n_perc')
有什么想法可以用plotly
中的 plotly 实现吗?
我的解决方案是这样的:
fig = px.line(foo_m[['week', 'n_perc']].drop_duplicates(), x='week', y='n_perc')
fig.add_bar(x=foo_m['week'].unique(), y=foo_m.query('variable == "var_1"')['value'], alignmentgroup='week')
fig.add_bar(x=foo_m['week'].unique(), y=foo_m.query('variable == "var_2"')['value'], alignmentgroup='week')
fig.update_layout(barmode='stack')
fig.show()
您可以执行以下操作:
fig = px.line(foo_m[['week', 'n_perc']].drop_duplicates(), x='week', y='n_perc')
接着:
fig.add_bar(foo_m, x='week', y='value', color='variable')
我通常使用 Plotly.graph 进行如下操作:
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(go.Scatter(x , y , mode="line"))
fig.add_trace(go.Bar(x , y )
fig.show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.