Попытка напечатать два цветных столбца с помощью matplotlib - PullRequest
0 голосов
/ 02 декабря 2018

Мне нужна горизонтальная гистограмма с накоплением, показывающая красный для плохого и зеленый для хорошего для каждого запроса на изменение системы (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 голосов
/ 02 декабря 2018

Если я правильно понял ваш вопрос, вот мое решение:

# 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...