Как я могу создать гистограмму с накоплением в matplotlib, где стеки меняются от бара к бару? - PullRequest
0 голосов
/ 09 ноября 2019

Итак, у меня есть DataFrame для панд, который выглядит примерно так:

       year country  total
0  2010     USA     10
1  2010    CHIN     12
2  2011     USA      8
3  2011    JAPN     12
4  2012    KORR      7
5  2012     USA     10
6  2013    CHIN      9
7  2013     USA     13

Я хотел бы создать столбчатую диаграмму с накоплением в matplotlib, где для каждого года есть один столбец, а для двух - стекистраны в этом году с ростом на основе столбца total. Цвет должен основываться на стране и быть представлен в легенде.

Кажется, я не могу понять, как это сделать. Я думаю, что я мог бы сделать это, используя циклы for, чтобы пройти каждый год и каждую страну, а затем построить панель с цветом, соответствующим значениям в словаре. Однако это создаст отдельные записи легенды для каждой отдельной панели, так что в легенде будет 8 общих значений. Насколько я могу судить, это также ужасно неэффективный способ построения графиков в matplotlib.

Кто-нибудь может дать несколько указателей?

1 Ответ

0 голосов
/ 09 ноября 2019

Вам нужно сначала преобразовать df. Это можно сделать с помощью следующего:

df = pd.DataFrame({'year': {0: 2010, 1: 2010, 2: 2011, 3: 2011, 4: 2012, 5: 2012, 6: 2013, 7: 2013},
                   'country': {0: 'USA', 1: 'CHIN', 2: 'USA', 3: 'JAPN', 4: 'KORR', 5: 'USA', 6: 'CHIN', 7: 'USA'},
                   'total': {0: 10, 1: 12, 2: 8, 3: 12, 4: 7, 5: 10, 6: 9, 7: 13}})

df2 = df.groupby(['year',"country"])['total'].sum().unstack("country")
print (df2)

#
country  CHIN  JAPN  KORR   USA
year                           
2010     12.0   NaN   NaN  10.0
2011      NaN  12.0   NaN   8.0
2012      NaN   NaN   7.0  10.0
2013      9.0   NaN   NaN  13.0
#

ax = df2.plot(kind='bar', stacked=True)

plt.show()

Результат:

enter image description here

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