Добавление цвета на столбцах столбчатой диаграммы на основе вклада в общую сумму каждого столбца

#python #matplotlib #seaborn

#python #matplotlib #seaborn

Вопрос:

Следующее изображение представляет собой фрейм данных, показывающий иммиграцию с каждого континента в страну. Как я могу построить столбчатый график, показывающий сумму за каждый год, и на каждом столбчатом графике показывать вклад каждого континента, используя разные цвета для каждого континента?

Мой код, который до сих пор меня доставал, выглядит следующим образом:

 df_continent = df_can.groupby('Continent').sum()
years = df_continent.columns.tolist() 
  

введите описание изображения здесь

Ответ №1:

У меня нет четкого примера результата, который вы ожидаете, но я уверен, что вы обнаружите, что первый пример — это просто график ежегодных иммиграционных показателей, сложенных по континентам. Второй пример представляет собой пример композиционного графика для каждого континента по годам.

 import pandas as pd
import numpy as np
import io

data = '''
continent 1980 1981 1982 1983 1984
Africa 3951 4363 3819 2617 2639
Asiz 31025 34314 30214 24696 27274
Europe 39760 44802 42720 24638 22287
"Latin America" 13081 15215 16769 15427 13678
"Northern America" 9378 10030 9074 7100 6661
Oceania 1942 1839 1675 1018 878
'''

# df = pd.read_csv(io.StringIO(data), sep='s ')
df = pd.read_csv(io.StringIO(data), delim_whitespace=True)
df.plot(x='continent', kind='bar', stacked=True)
  

введите описание изображения здесь

процентный тип

 d = df[df.columns[1:]].div(df[df.columns[1:]].sum())
df1 = pd.concat([df[['continent']],d],1)
df1.set_index('continent', inplace=True)
df1
            1980    1981    1982    1983    1984
continent                   
Africa  0.039854    0.039462    0.036626    0.034664    0.035945
Asiz    0.312951    0.310357    0.289764    0.327117    0.371494
Europe  0.401061    0.405217    0.409702    0.326348    0.303567
Latin America   0.131949    0.137614    0.160821    0.204342    0.186306
Northern America    0.094596    0.090718    0.087023    0.094045    0.090728
Oceania 0.019589    0.016633    0.016064    0.013484    0.011959

df1.T.plot(kind='bar', stacked=True)
  

введите описание изображения здесь