本节介绍seaborn展示数据分布关系的图表(Distribution plots)的实现,该类图表用于展示数据集的分布规律,帮助快速获取数据多方面信息,例如,观测值的范围、中心趋势、是否存在某个方向上严重偏斜、是否存在双峰性、是否存在显著的异常值等等。
分布关系的图表包含:直方图、核密度估计(KDE)图、累积曲线图和轴须图(rug plot)。
直方图
直方图旨在通过分箱和计数观测值来近似生成数据的概率密度函数。
例如,堆积叠加直方图,
sns.displot(
penguins,
x="鳍长 (毫米)",
kind='hist',
hue="企鹅的种类", #hue指定分组
palette=["#006a8e", "#b1283a", "#a8a6a7"],
multiple="stack") #堆叠叠加
例如,百分比堆积,每个箱子中各组百分比累加为1,
sns.displot(
penguins,
x="鳍长 (毫米)",
kind='hist',
hue="企鹅的种类", #hue指定分组
palette=["#006a8e", "#b1283a", "#a8a6a7"],
multiple="fill") #百分比堆积
核密度估计图
核密度估计(KDE)图功能类似上文8.1 章节的直方图,区别于直方图使用离散箱,KDE图使用高斯核(Gaussian kernel)对观测值进行平滑处理,生成连续的密度估计,KDE图更清晰且更易解释。
例如,图层叠加,
sns.displot(
penguins,
x="鳍长 (毫米)",
kind='kde',
hue="岛屿", #按照变量"岛屿"分组
fill=True,
multiple="layer", #指定按照'layer'叠加
palette=["#006a8e", "#b1283a", "#a8a6a7"],
)
例如,堆积叠加,
sns.displot(
penguins,
x="鳍长 (毫米)",
kind='kde',
hue="岛屿",
fill=True,
multiple="stack", #"stack"设置堆积叠加
palette=["#006a8e", "#b1283a", "#a8a6a7"],
)
例如,百分比叠加,
sns.displot(
penguins,
x="鳍长 (毫米)",
kind='kde',
hue="岛屿",
fill=True,
multiple="fill", #"fill"设置百分比叠加
palette=["#006a8e", "#b1283a", "#a8a6a7"],
)
累积曲线图
累积曲线图,全称“经验累积分布函数”(ecdf,empirical cumulative distribution functions),反映数据集中小于某值的观测比例,提供直观的分布图。
例如,分组累积曲线图,
sns.displot(data=penguins,
x="鳍长 (毫米)",
hue="企鹅的种类", # hue设置分组
kind="ecdf",
palette=["#006a8e", "#b1283a", "#a8a6a7"])
例如,补集累积分布函数,
sns.displot(
data=penguins,
x="鳍长 (毫米)",
hue="企鹅的种类",
complementary=True, #complementary开启补集累积分布函数complementary CDF (1 - CDF)
kind="ecdf",
palette=["#006a8e", "#b1283a", "#a8a6a7"])
轴须图
轴须图(rug plot)通过在x轴和y轴上绘制刻度以显示变量的位置,以补充其他图表。
例如,散点图和轴须图一起用,
sns.scatterplot(#使用axes-level方法:如上文的scatterplot()、lineplot()等
data=penguins,
x="鳍长 (毫米)",
y="喙长 (毫米)",
hue="企鹅的种类",
style="企鹅的种类",
palette=["#006a8e", "#b1283a", "#a8a6a7"],
s=200)
sns.rugplot(
data=penguins,
x="鳍长 (毫米)", #x轴轴须图
y="喙长 (毫米)", #y轴轴须图
hue="企鹅的种类",
palette=["#006a8e", "#b1283a", "#a8a6a7"],
legend=False #关闭轴轴须图图例
)
再例如,kde图和轴须图一起使用,
sns.kdeplot(#使用axes-level方法:kdeplot()
data=penguins,
x="鳍长 (毫米)", #x轴轴须图
hue="企鹅的种类",
fill=True,
multiple="layer",
palette=["#006a8e", "#b1283a", "#a8a6a7"])
sns.rugplot(data=penguins,
x="鳍长 (毫米)",
hue="企鹅的种类",
palette=["#006a8e", "#b1283a", "#a8a6a7"],
legend=False) #关闭轴轴须图图例
直方图、核密度估计(KDE)图、累积曲线图和轴须图(rug plot)更多变种,