我试图在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“,就像现在一样。
我如何做到这一点而不人为地减去。对不起,我不知道这些“堆叠”的情节叫什么,所以我所有的搜索都没有给出一个简单的解决方案。
发布于 2016-08-04 18:44:16
请查看下面的代码,这不是一个全面的解决方案,但基本上实现了你想要的。
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
来更改透明度。我没有在整件事上使用函数。不管怎样,我认为这是一种方法。
https://stackoverflow.com/questions/38779638
复制相似问题