Как сделать гистограмму из 2 переменных на основе одного и того же DataFrame, и я хочу выбрать 2 или до 5 данных - PullRequest
0 голосов
/ 18 мая 2019

У меня есть DataFrame:

wilayah   branch   Income Januari 2018    Income Januari 2019    Income Febuari 2018     Income Febuari 2019     Income Jan-Feb 2018     Income Jan-Feb 2019
   1     sunarto   1000                     1500                     2000                     3000                     3333                     4431                    
   1     pemabuk   500                       700                     3000                     3000                     4333                     5431                    
   1     pemalas   2000                     2200                     4000                     3000                     5333                     6431                   
   1     hasuntato 9000                     1200                     6000                     3000                     2222                     2121                     
   1     sibodoh   1000                     1500                     3434                     3000                     2233                     2121                     
...

Я рассчитываю создать гистограмму, где ось x - это каждое имя в ветви (например, sunarto, pemabuk, pemalas и т. Д.), А ось y - доход.

Допустим, я буду сравнивать доход сунарто за январь 2018 и доход за январь 2019 , у доход Пемабука за январь 2018 и доход за январь 2019 , и т. д. (1 имя по оси x, 2 значения как сравнение двух значений). Затем я буду сортировать значения по убыванию с Доход за январь-февраль 2019 на моей гистограмме.

Я пытался:

import matplotlib.pyplot as plt
import pandas as pd

fig, ax = plt.subplots()
ax = df1[["Sunarto","Income Januari 2018", "Income Januari 2019"]].plot(x='branch', kind='bar', color=["g","b"],rot=45)
plt.show()

1 Ответ

0 голосов
/ 18 мая 2019

Рассмотрим агрегацию groupby, затем запустите DataFrame.plot.Ниже будут размещены все ветви на оси абсцисс с разными столбцами дохода в виде цветовых кодированных ключей в легенде.

agg_df = df.groupby('branch').sum()

fig, ax = plt.subplots(figsize=(15,5)) 

agg_df.plot(kind='bar', edgecolor='w', ax=ax, rot=22, width=0.5, fontsize = 15)

# ADD TITLES AND LABELS 
plt.title('Income by Branches, Jan/Feb 2018-2019', weight='bold', size=24) 
plt.xlabel('Branch', weight='bold', size=24) 
plt.ylabel('Income', weight='bold', size=20) 

plt.tight_layout()
plt.show() 
plt.clf() 

Если вы хотите, чтобы каждая отдельная ветвь располагалась на определенных столбцах, итерируйте список groupby:

dfs = df.groupby('branch')

for i,g in dfs:
   ord_cols = (pd.melt(g.drop(columns="wilayah"), id_vars = "branch")
                            .sort_values("value")["variable"].values
              )

   fig, ax = plt.subplots(figsize=(8,4)) 

   (g.reindex(columns=ord_cols)
     .plot(kind='bar', edgecolor='w', ax=ax, rot=0, width=0.5, fontsize = 15)
   )

   # ADD TITLES AND LABELS 
   plt.title('Income by {} Branch, Jan/Feb 2018-2019'.format(i), 
             weight='bold', size=16) 
   plt.xlabel('Branch', weight='bold', size=16) 
   plt.ylabel('Income', weight='bold', size=14) 

   plt.tight_layout()
   plt.show() 

Groupby Plot Outputs

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