【问题标题】:How to add a line plot on top of a stacked bar plot in plotly express in python如何在python中的plotly express中在堆积条形图的顶部添加线图
【发布时间】:2021-04-20 12:31:40
【问题描述】:

我有以下数据框:

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

我正在使用以下代码来创建堆积条形图:

import plotly.express as px
px.bar(foo_m, x='week', y='value', color='variable')

我想在这个堆积条形图的顶部添加这个线图:

px.line(foo_m[['week', 'n_perc']].drop_duplicates(), x='week', y='n_perc')

有什么想法可以在 python 中使用plotly 吗??

【问题讨论】:

    标签: python plotly plotly-dash plotly-python


    【解决方案1】:

    我的解决办法是这样的:

    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()
    

    【讨论】:

      【解决方案2】:

      您可以执行以下操作:

      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')

      【讨论】:

      • 这会引发错误ValueError: Invalid value of type 'pandas.core.frame.DataFrame' received for the 'alignmentgroup' property of bar。有什么想法吗?
      【解决方案3】:

      我通常使用 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()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-27
        • 2020-09-14
        • 2021-06-04
        • 1970-01-01
        • 1970-01-01
        • 2014-06-05
        相关资源
        最近更新 更多