如何在 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 列