我正在尝试在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”显示为绿色,就像现在一样。
如何在不人为减去的情况下实现这一目标。对不起,我不知道这些“堆积”的图被称为什么,所以我所有的搜索都没能产生一个简单的解决方案。
答案 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()
以下是我的想法:
plug and play
解决方案,但似乎没有artifical
,我的意思是在绘制它之前对Dataframe
进行一些数据处理并不困难。 axis
。基本上,您的要求是以叠加的方式制作条形图,但重叠。我的意思是stacked bar
通常意味着你在彼此之上叠加而没有任何重叠,这就是为什么它被称为stack
。但是,由于您希望以最小值位于最前面的方式组织条形,第二个最小值位于第2个,依此类推...... 所以在这里,我使用twinx()
为每个数据集创建不同的轴层,为了让事情变得更容易,我没有对它们进行排序,只是使用alpha=0.8
来更改只有透明度。而且我没有使用整个功能。无论如何,我认为这是一种方法。