【问题标题】:Plotly stacked bar chart pandas dataframe情节堆积条形图熊猫数据框
【发布时间】:2019-08-03 22:07:19
【问题描述】:

我有一个包含不同列数的数据框。具有正值和负值。是否可以在数据框中制作包含所有这些列的堆叠条形图?

    A    B     C
0   34   34    -12
1   34   223   -12
2  34    56    -12
3   34   86    -12
4   56   86    -12
5   56   43    -12
6   78   34    -12

【问题讨论】:

    标签: python pandas plotly


    【解决方案1】:

    现在可以通过using plotly as plotting backend 直接使用 pandas 制作堆积条形图。

    pd.options.plotting.backend = 'plotly'
    fig = df.plot(kind='bar')
    

    【讨论】:

      【解决方案2】:

      (更新了 plotly 版本的答案)

      使用px.bar 将直接为您提供堆积条形图。如果您的条形图由于某种原因没有堆叠,请尝试:

      fig.update_layout(barmode='stack')
      

      完整代码:

      import pandas as pd
      import plotly.express as px
      
      # data
      df = pd.DataFrame({'A': {0: 34, 1: 34, 2: 34, 3: 34, 4: 56, 5: 56, 6: 78},
                           'B': {0: 34, 1: 223, 2: 56, 3: 86, 4: 86, 5: 43, 6: 34},
                           'C': {0: -12, 1: -12, 2: -12, 3: -12, 4: -12, 5: -12, 6: -12}})
      
      colors = px.colors.qualitative.T10
      
      # plotly
      fig = px.bar(df, 
                   x = df.index,
                   y = [c for c in df.columns],
                   template = 'plotly_dark',
                   color_discrete_sequence = colors,
                   title = 'Stacked bar chart using px.bar()', 
                   )
      
      fig.show()
      

      旧答案:


      这是在 Jupyter Notebook 中离线使用 plotly 的堆积条形图。只需确保您已安装imports 下列出的软件包。 df = cf.datagen.lines() 使用来自袖扣的样本数据生成 pandas 数据框。

      情节堆积条形图:

      可重现的 sn-p:

      # imports
      import plotly
      import cufflinks as cf
      from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
      import pandas as pd
      import numpy as np
      
      # setup
      init_notebook_mode(connected=True)
      np.random.seed(123)
      cf.set_config_file(theme='pearl')
      
      # qtconsole for debugging
      #%qtconsole --style vim #src# https://qtconsole.readthedocs.io/en/stable/
      
      # Random data using cufflinks
      df = cf.datagen.lines()
      df = df[['UUN.XY', 'MJF.XV', 'XBB.AO']].head(50)
      df=np.abs(df)
      
      # make figure
      fig = df.iplot(asFigure=True, kind='bar', barmode = 'stack',
                     xTitle='Dates',yTitle='Returns',title='Returns')
      
      # plot figure
      iplot(fig)
      

      编辑 - 用负值测试


      没有df=np.abs(df)这一行运行同样的事情

      【讨论】:

        【解决方案3】:

        这里也可以使用 Pandas DataFrame 的plot

        df.plot(kind='bar', stacked=True)
        

        另外,here 是一个类似的线程。

        【讨论】:

        • 这不是图表。它需要有情节
        猜你喜欢
        • 1970-01-01
        • 2019-04-17
        • 1970-01-01
        • 2021-05-10
        • 2019-04-30
        • 1970-01-01
        • 1970-01-01
        • 2015-06-28
        相关资源
        最近更新 更多