Python 在pandas中绘制部分堆叠条形图

Python 在pandas中绘制部分堆叠条形图,python,pandas,Python,Pandas,我有一个如下形式的DataFarme df。我想用4对条绘制一个图。这意味着四天中的每一天都有两条代表0和1的线。对于这两个条,我想要一个堆叠的条,所以每个条有3种颜色,代表70。我尝试使用“stacked=True”,但绘制了一个带有6种颜色的单条,而不是成对的条。你能帮助任何人吗?非常感谢 Score <30 30-70 >70 Gender 0 1 0 1 0 1 2017-07-09

我有一个如下形式的DataFarme df。我想用4对条绘制一个图。这意味着四天中的每一天都有两条代表0和1的线。对于这两个条,我想要一个堆叠的条,所以每个条有3种颜色,代表70。我尝试使用“stacked=True”,但绘制了一个带有6种颜色的单条,而不是成对的条。你能帮助任何人吗?非常感谢

Score          <30       30-70      >70
Gender         0    1    0    1   0     1
2017-07-09    23   10   25   13   12   21
2017-07-10    13   14   12   14   15   10
2017-07-11    24   25   10   15   20   15
2017-07-12    23   17   20   17   18   17
70分
性别01101
2017-07-09    23   10   25   13   12   21
2017-07-10    13   14   12   14   15   10
2017-07-11    24   25   10   15   20   15
2017-07-12    23   17   20   17   18   17

您可以使用
bottom
参数。 走这条路

>> import matplotlib.pyplot as plt
>> import numpy as np
>> import pandas as pd
>>
>> columns = pd.MultiIndex.from_tuples([(r, b) for r in ['<30', '30-70', '>70'] 
>>                                             for b in [0, 1]])
>> index = ['2017-07-%s' % d for d in ('09', '10', '11', '12')]
>> df = pd.DataFrame([[23,10,25,13,12,21], [13,14,12,14,15,10],
>>                    [24,25,10,15,20,15], [23,17,20,17,18,17]], 
>>                    columns=columns, index=index)
>>
>> width = 0.25
>> x = np.arange(df.shape[0])
>> xs = [x - width / 2 - 0.01, x + width / 2 + 0.01]
>> for b in [0, 1]:
>>   plt.bar(xs[b], df[('<30', b)], width, color='r')
>>   plt.bar(xs[b], df[('30-70', b)], width, bottom=df[('<30', b)], color='g')
>>   plt.bar(xs[b], df[('>70', b)], width, bottom=df[('<30', b)] + df[('30-70', b)], color='b')
>> plt.xticks(x, df.index)
>> plt.show()
>将matplotlib.pyplot作为plt导入
>>将numpy作为np导入
>>作为pd进口熊猫
>>
>>columns=pd.MultiIndex.from_元组([(r,b)表示['70'中的r]
>>对于[0,1]]中的b)
>>索引=['2017-07-%s'%d代表'09','10','11','12')]
>>df=pd.数据帧([[23,10,25,13,12,21],[13,14,12,14,15,10],
>>                    [24,25,10,15,20,15], [23,17,20,17,18,17]], 
>>列=列,索引=索引)
>>
>>宽度=0.25
>>x=np.arange(df.shape[0])
>>xs=[x-width/2-0.01,x+width/2+0.01]
>>对于[0,1]中的b:

>>plt.bar(xs[b],df[('70',b)],width,bottom=df[('这是我需要的。非常感谢你的帮助,塔拉什ypka。