pandas“堆积”条形图,未添加值以提供高度

时间:2016-08-05 01:05:54

标签: python pandas matplotlib bar-chart

我正在尝试在pandas 0.18.1中显示条形图,其中不同列的值显示在彼此之上但未添加。所以这就是我认为没有“堆叠”的堆积条形图,它会添加所有堆栈值。

所以在下面的例子中

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”显示为绿色,就像现在一样。

stacked bar plot

如何在不人为减去的情况下实现这一目标。对不起,我不知道这些“堆积”的图被称为什么,所以我所有的搜索都没能产生一个简单的解决方案。

1 个答案:

答案 0 :(得分:2)

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

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

enter image description here

以下是我的想法:

  1. 首先,我尝试了同样的事情,尝试找到一些plug and play解决方案,但似乎没有
  2. 然后我试着玩这些价值观,但你明确表示你不想人为地玩这些价值观。我个人认为这实际上取决于你如何定义artifical,我的意思是在绘制它之前对Dataframe进行一些数据处理并不困难。
  3. 无论如何,在这里我们跳到第三个解决方案,即使用axis。基本上,您的要求是以叠加的方式制作条形图,但重叠。我的意思是stacked bar通常意味着你在彼此之上叠加而没有任何重叠,这就是为什么它被称为stack。但是,由于您希望以最小值位于最前面的方式组织条形,第二个最小值位于第2个,依此类推......
  4. 所以在这里,我使用twinx()为每个数据集创建不同的轴层,为了让事情变得更容易,我没有对它们进行排序,只是使用alpha=0.8来更改只有透明度。而且我没有使用整个功能。无论如何,我认为这是一种方法。