Сложенная гистограмма в Pandas Python - PullRequest
0 голосов
/ 27 сентября 2019

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

Country m1  m2  m3
Canada  1   43  0.2
Canada  3   43  0.5
Canada  4   41  0.1
Canada  2   46  0.3
Sweden  4   46  0.4
Sweden  2   48  0.5
Sweden  3   39  0.5
France  5   43  0.1
France  2   48  0.1
France  3   49  0.9

Я хотел бы составить гистограмму, которая объединяет m3, скажем, в 5 корзин или что угодно, и складывает эти корзины в страны какЧто ж.

Таким образом, корзина 0 - 0,1 будет иметь столбец с накоплением, который будет 2/3 Франция и 1/3 Канада (представлены цветами и затем с легендой).

У меня есть следующее:

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('data.csv')
x= df['m3']
num_bins = 5
plt.hist(x, num_bins, density=1, histtype='bar', stacked=True, label=df['Country'] )
plt.show()

Но это не складывает это вообще.Думаю, я здесь что-то не так делаю ...

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Вы можете использовать crosstab с cut и построить график по DataFrame.plot.bar:

df = pd.crosstab(pd.cut(df['m3'], 5), df['Country'])
print (df)
Country         Canada  France  Sweden
m3                                    
(0.0992, 0.26]       2       2       0
(0.26, 0.42]         1       0       1
(0.42, 0.58]         1       0       2
(0.74, 0.9]          0       1       0

df.plot.bar(stacked=True)

graph

Или используйте DataFrame.pivot с DataFrame.plot.hist:

df1 = df.pivot(columns='Country', values='m3')
print (df1)
Country  Canada  France  Sweden
0           0.2     NaN     NaN
1           0.5     NaN     NaN
2           0.1     NaN     NaN
3           0.3     NaN     NaN
4           NaN     NaN     0.4
5           NaN     NaN     0.5
6           NaN     NaN     0.5
7           NaN     0.1     NaN
8           NaN     0.1     NaN
9           NaN     0.9     NaN

df1.plot.hist(stacked=True, bins=5)

graph2

0 голосов
/ 27 сентября 2019

Другой вариант может быть:

df_plot = df.groupby(['m3', 'Country']).size().reset_index().pivot(columns='Country', index='m3', values=0)
df_plot.plot(kind='bar', stacked=True)
plt.show()

enter image description here

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