【问题标题】:pandas "stacked" bar plot with values not added to give height未添加值以给出高度的熊猫“堆叠”条形图
【发布时间】:2016-12-11 07:16:02
【问题描述】:

我试图在pandas 0.18.1 中显示一个条形图,其中不同列的值显示在彼此的顶部但未添加。所以这是我认为没有添加所有堆栈值的“stacking”的堆叠条形图。

所以在下面的例子中

import pandas
from pandas import DataFrame

so_example = DataFrame( [(15 , 0 , 0 , 4),(16,  0,  1,  4),(17 , 0 , 0 , 6)]).set_index(0)
so_example.plot.bar(stacked=True)

这给出了Dataframe

>>> so_example
    1  2  3
0          
15  0  0  4
16  0  1  4
17  0  0  6

第二点“16”的最大高度为 1 + 4 = 5 。相反,我希望最大高度为 4,并且像现在一样以绿色显示“1”。

如何在不人为减去的情况下实现这一点。抱歉,我不知道这些“堆叠”的图叫什么,所以我的所有搜索都未能得出一个简单的解决方案。

【问题讨论】:

    标签: python pandas matplotlib bar-chart


    【解决方案1】:

    请查看以下代码,它不是一个全面的解决方案,但基本上达到了你想要的。

    import pandas as pd
    import matplotlib.pyplot as plt
    
    so_example = pd.DataFrame( [(15 , 0 , 0 , 4),(16,  0,  1,  4),(17 , 0 , 0 , 6)]).set_index(0)
    fig = plt.figure()
    ax = fig.add_subplot(111)
    _max = so_example.values.max()+1
    ax.set_ylim(0, _max)
    so_example.ix[:,1].plot(kind='bar', alpha=0.8, ax=ax, color='r')
    ax2 = ax.twinx()
    ax2.set_ylim(0, _max)
    so_example.ix[:,2].plot(kind='bar', alpha=0.8, ax=ax2, color='b')
    ax3 = ax.twinx()
    ax3.set_ylim(0, _max)
    so_example.ix[:,3].plot(kind='bar', alpha=0.8, ax=ax3, color='g')
    
    fig.savefig('c:\haha.png')
    fig.show()
    


    这是我的想法:

    1. 首先,我尝试了和你一样的方法,尝试找到一些plug and play的解决方案,但似乎没有
    2. 然后我尝试使用这些值,但您明确表示您不想人为地使用这些值。我个人认为这真的取决于你如何定义artifical,我的意思是在绘制之前对Dataframe 进行一些数据处理不会那么困难。
    3. 不管怎样,这里我们跳到第三种解决方案,那就是玩axis。因为基本上,您的要求是以堆叠方式制作条形图但重叠。我的意思是通常stacked bar 意味着您将所有东西堆叠在一起而没有任何重叠,这就是为什么它被称为stack。但是,由于您想以 最小值位于最前面的方式来组织条形,因此第二小的值位于第二位,依此类推...

    所以在这里,我使用twinx() 为每个数据集创建不同的轴层,为了让事情对我来说更容易一些,我没有对它们进行排序,只是使用alpha=0.8 仅更改透明度。而且我没有对整个事情使用函数。无论如何,我认为这是一种方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      • 2019-01-30
      • 2018-11-13
      • 2019-04-17
      • 2018-09-30
      • 2017-02-21
      相关资源
      最近更新 更多