簡體   English   中英

如何在 Python 中繪制多級分組直方圖?

[英]How to draw multiple levels groupby histograms in Python?

我有一個像這樣的 dataframe,

col1    col2     col3    
A       east        5      
A       west        7
A       east        1
A       east        6
B       east        2
B       west        9
B       east        8
...
Z       west        4

我知道如何分組並通過使用制作直方圖

df[df.col1.isin(ix)].groupby('col1').hist()

如何使用上面的 dataframe 獲得 2 個級別的 groupby 並繪制直方圖? 對於每個col1組直方圖,我希望它們位於單獨的 plot 中。 但是對於每個col2組。 我希望他們像這樣合而為一。 在此處輸入圖像描述

例如,最終結果將是來自AZ的 26 個直方圖。 每個內部有 2 個地塊( east&west )。

您可以通過 pivot 表和分組 plot:

df = pd.DataFrame({'col1': np.random.choice(('A','B'), size=100),
                   'col2': np.random.choice(('east', 'west'), size=100),
                   'col3': np.random.randint(0,10, 100)})

df['idx'] = df.groupby('col1').col2.cumcount()

(df.pivot_table(index=['idx','col1'], 
                columns=['col2'], 
                values='col3')
   .groupby('col1').plot.hist(subplots=False, alpha=0.5)

)

Output:

在此處輸入圖像描述 在此處輸入圖像描述

使用seaborn

數據:

import string
import numpy as np
import pandas as pd
import random

alpha_list = [random.choice(list(string.ascii_uppercase)) for _ in range(10_000)]
coor_list = [random.choice(['east', 'west']) for _ in range(10_000)]
rand_val = [np.random.randint(10) for _ in range(10_000)]
df = pd.DataFrame({'col1': alpha_list, 'col2': coor_list, 'col3': rand_val})
df.sort_values(by='col1', inplace=True)

col1  col2  col3
   A  west     1
   A  east     3
   A  west     9
   A  west     5
   A  west     7
   A  east     1
   A  east     5
   A  west     2
   A  east     2
   A  west     2

Plot:

g = sns.FacetGrid(df, col='col1', hue='col2', col_wrap=7)
g.map(sns.distplot, 'col3', hist_kws=dict(edgecolor='black'), bins=range(0, 11, 1), kde=False)
plt.xlabel('Value Range')
plt.ylabel('Frequency')
plt.legend()
plt.xticks(range(1, 11, 1))
plt.show()

在此處輸入圖像描述

  • 如果要在每個圖形上添加刻度標簽,請將以下代碼放在plt.show()之前的行中:
for ax in g.axes.flatten():
    ax.tick_params(labelbottom=True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM