如何在 pandas 中按组绘制直方图


您可以使用以下方法在 pandas DataFrame 中按组绘制直方图:

方法 1:使用多个图按组绘制直方图

 df[' values_var ']. hist (by=df[' group_var '])

方法 2:使用单个图按组绘制直方图

 plt. hist (group1, alpha= 0.5 , label=' group1 ')
plt. hist (group2, alpha= 0.5 , label=' group2 ')
plt. hist (group3, alpha= 0.5 , label=' group3 ')

以下示例展示了如何在实践中使用每种方法,下面的 pandas DataFrame 显示了来自三个不同球队的篮球运动员的得分:

 import pandas as pd
import numpy as np

#make this example reproducible
n.p. random . seeds (1)

#createDataFrame
df = pd. DataFrame ({' team ': np.repeat ([' A ',' B ',' C '], 100 ),
                   ' points ': np. random . normal (loc= 20 , scale= 2 , size= 300 )})

#view head of DataFrame
print ( df.head ())

  team points
0 A 23.248691
1 A 18.776487
2 A 18.943656
3 A 17.854063
4 A 21.730815

示例 1:使用多个图按组绘制直方图

以下代码演示如何创建三个直方图,显示三支球队中每支球队的球员得分分布:

 #create histograms of points by team
df[' points ']. hist (by=df[' team '])

我们还可以使用edgecolor参数向每个直方图添加边缘线,并使用figsize参数增加每个直方图的大小以使它们更容易可视化:

 #create histograms of points by team
df[' points ']. hist (by=df[' team '], edgecolor=' black ', figsize = ( 8 , 6 )) 

示例 2:使用单个图按组绘制直方图

以下代码演示了如何创建三个直方图并将它们全部放在同一个图上:

 import matplotlib.pyplot as plt

#define points values by group
A = df. loc [df[' team '] == ' A ', ' points ']
B = df. loc [df[' team '] == ' B ', ' points ']
C = df. loc [df[' team '] == ' C ', ' points ']

#add three histograms to one plot
plt. hist (A, alpha= 0.5 , label=' A ')
plt. hist (B, alpha= 0.5 , label=' B ')
plt. hist (C, alpha= 0.5 , label=' C ')

#add plot title and axis labels
plt. title (' Points Distribution by Team ')
plt. xlabel (' Points ')
plt. ylabel (' Frequency ')

#add legend
plt. legend (title=' Team ')

#displayplot
plt. show ()

最终结果是显示三个彼此堆叠的直方图的图。

注意alpha参数指定每个直方图的透明度。该值的范围可以从 0 到 1。通过将该值设置为 0.5,我们可以更好地可视化每个重叠的直方图。

其他资源

以下教程解释了如何在 Python 中创建其他常见绘图:

如何在 Matplotlib 中绘制多条线
如何从 Pandas DataFrame 创建箱线图
如何在条形图上绘制多个 Pandas 列

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注