尝试使用matplotlib

时间:2018-12-02 19:18:27

标签: python matplotlib group-by

我想要一个堆叠的水平条形图,对于每个系统更改请求(CR),红色表示不良,绿色表示良好。 #是按系统划分的好/坏CR的计数:

我的数据:

system                      assessment #

ALPHA                       bad     4
                            good    2
BRAVO                       good   55
                            bad    28
CHARLIE                     bad     3
DELTA                       bad     4

我尝试了

chart = gb.plot.barh(color=chart_colors, stacked=True)

gb = df.groupby(group_by).assessment.value_counts(
                        ).unstack(level=-1).nlargest(limit,columns='bad').stack()


rbar = [x for x in gb.unstack(level=-1)['bad']]
gbar = [x for x in gb.unstack(level=-1)['good]]

#     
chart = plt.barh(0, rbar, color='r')
chart = plt.barh(1, gbar, left=rbar, color='g')

plt.show()

我想要显示的是按系统是好是坏的

请注意,当我gb.unstack(-1)出现时,

system        owner       good assmt    bad assessment
ALPHA         Alice               35                45
BRAVO         Bob                 15                25
CHARLIE       Charly               7                17
DELTA         David               15                10

目标是按5个左右的不良评估对结果进行排序,并生成图表:

ALPHA    BBBBBBBBBGGGGGGGGGGGGGG
BRAVO    BBBBBBBGGGGGGGG
CHARLIE  BBBBBGGGGGG
etc.

到目前为止,我无法使用groupby对象执行此操作,但是感觉到我缺少明显的内容。

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,那么这是我的解决方案:

# Given
df = pd.DataFrame({'system':['Alpha', 'Bravo', 'Charlie'],
                  'good#':[10, 3, 0],
                  'bad#': [5, 6, 4]})
df
   bad# good#   system
0   5   10      Alpha
1   6   3       Bravo
2   4   0       Charlie

df = df.sort_values('bad#', ascending=False)
df
   bad# good#   system
1   6   3       Bravo
0   5   10      Alpha
2   4   0       Charlie

df.set_index('system').plot(kind='barh', stacked=True)

plt