文章目录
在研究数值变量之间的关系时,如果其中一个主要变量是"类别",那么使用更类别统计绘图方法可能会更好。
1. 类别统计绘图API概述
seaborn中“类别”绘图函数共9个:
catplot()
:通过kind参数。默认为strip。- 分类散点图
stripplot()
:散点条图swarmplot()
:散点群图
- 分类分布图
boxplot()
:箱型图boxenplot()
:增强箱型图violinplot()
:小提琴图
- 分类估计图
barplot()
pointplot()
countplot()
- 分类散点图
- catplot函数为figure级函数,其他函数为axes级函数。
figure级函数与axes级函数区别见Seaborn系列(一):绘图基础、函数分类、长短数据类型支持
2. catplot基本绘图
sns.catplot(x=None,y=None,data=None,kind="strip")
:根据kind绘制分类图。
catplot同样支持legend、height、aspect等参数。hue等参数在后续详细介绍
2.1 catplot绘制分类散点图
分类散点图实际上就是把x坐标相同的数据同时绘制出来。catplot共有两种方法:
- 散点条图:数据按x分组,所有x相同的y值,在x坐标上方绘制散点,散点形成条状。
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset("tips")
sns.catplot(data=tips, x="day", y="total_bill", kind="strip")
plt.show()
- 散点群图:类似散点条图,但是y值相同的点显示为树状。
sns.catplot(data=tips, x="day", y="total_bill", kind="swarm")
2.2 catplot绘制分类分布图
分类分布图包括:箱型图、增强箱型图、小提琴图。
箱型图把按x分组的数据,每一组数据分别统计中位数、25%位置数、75%位置数,以及高位和低位值。
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset("tips")
sns.catplot(data=tips, x="day", y="total_bill", kind="box")
plt.show()
箱图上下方的点表示超出高位和低位的数值。
增强箱型图和箱型图类似,但是绘制更多的分位数。(分位数由参数k_depth确定)
sns.catplot(data=tips, x="day", y="total_bill", kind="boxen")
小提琴图外形像小提琴,越宽的地方表示y值密度越大,小提琴图由轮廓和内部图形组成:
- 轮廓是kde核密度估计曲线。
- 内部是箱型图的四分位数。
sns.catplot(data=tips, x="day", y="total_bill", kind="violin")
2.3 catplot绘制分类估计图
如果你希望显示值的趋势估计值,可以采用分类估计图,而不是每个类别的分布。
catplot分类估计图包括:柱形图、点图
柱形图应用函数获取估计值(默认采用平均值),然后绘制成柱形图。
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset("tips")
sns.catplot(data=tips, x="day", y="total_bill", kind="bar")
plt.show()
柱形图上方的短线为置信区间,和lineplot置信区间相同,把柱形图和lineplot图重叠对比如下:
sns.catplot(data=tips, x="day", y="total_bill", kind="bar")
sns.lineplot(data=tips, x="day", y="total_bill")
点图绘制平均值曲线和置信区间,和lineplot非常像,显示的线条和短线和lineplot也完全一致。
sns.catplot(data=tips, x="day", y="total_bill", kind="point")
计数图对指定x或y坐标中每个值出现的次数进行统计,绘制成柱形图。柱形高度坐标值统计个数。
sns.catplot(data=tips, x="day", kind="count")
3. 分类散点图
3.1 strip图
stripplot()
:散点条图catplot(kind=“strip”)- hue参数:分组按不同颜色绘图
- dodge参数:是否将不同的组分开绘制
- jitter参数:设置抖动量,False表示散点条绘制在一条线上。默认为True。
sns.catplot(data=tips, x="day", y="total_bill", kind="strip", hue="sex")
sns.catplot(data=tips, x="day", y="total_bill", kind="strip", hue="sex", dodge=True)
sns.catplot(data=tips, x="day", y="total_bill", kind="strip", jitter=False)
jitter也可以用数值表示抖动量,即条形图的宽度,一般可以用0-1值。大于1的值也可以,但是就看不出每条的分界了。
linewidth, size, color等参与可以用于设置marker的样式。pallete参数可以设置hue的颜色。
3.2 swarm图
swarmplot()
:散点群图catplot(kind=“swarm”)- hue参数:分组按不同颜色绘图
- dodge参数:是否将不同的组分开绘制
sns.catplot(data=tips, x="day", y="total_bill", kind="swarm", hue="sex")
sns.catplot(data=tips, x="day", y="total_bill", kind="swarm", hue="sex", dodge=True)
linewidth, size, color等参与可以用于设置marker的样式。pallete参数可以设置hue的颜色。
4 分类分布图
4.1 box图
boxplot()
:散点群图catplot(kind=“box”)- hue参数:分组按不同颜色绘图
- dodge参数:是否将不同的组分开绘制
- orient参数:“v”|“h”,设置box图方向
- whis参数:设置低位和高位点系数,高位、低位数公式:中位数±whis*(75%位数-25%位数)
- whis设置为np.inf时,低位和高位值取min和max。
sns.catplot(data=tips, x="day", y="total_bill", kind="box", hue="sex")
#sns.catplot(data=tips, x="day", y="total_bill", kind="box", hue="sex", dodge=True) #dodge参数没有效果
orient参数可以改变box图方向。但是有一种情况box会自动改变方向,可以省略orient参数。
sns.catplot(data=tips, y="day", x="total_bill", kind="box")# 省略orient="h",因为y是非数值类型分类数据
sns.catplot(data=tips, x="day", y="total_bill", kind="box", whis=np.inf)
4.2 boxen图
boxenplot()
:增强箱型图catplot(kind=“boxen”)- hue参数:分组按不同颜色绘图
- dodge参数:是否将不同的组分开绘制
- orient参数:“v”|“h”,设置boxen图方向
- k_depth参数:箱形图箱数设置。
- 当为数字是表示具体箱形框数量。
- “tukey”:默认值,还可以是“proportion”, “trustworthy”, “full”,都是内置的确定方法。在 Wickham的论文中有论述
boxenplot的hue、dodge和orient参数和boxplot函数相似:
sns.catplot(data=tips, x="day", y="total_bill", kind="boxen", hue="sex", dodge=True)
k_depth参数通常用默认的就ok,用proportion和full会绘制的更加详细。数值可以指定箱形框数量;
4.3 violin图
violinplot()
:增强箱型图catplot(kind=“violin”)- hue参数:分组按不同颜色绘图
- dodge参数:是否将不同的组分开绘制
- orient参数:“v”|“h”,设置boxen图方向
- split参数:当绘制两组图时,设置为True,则分别绘制半个提琴
- 轮廓核密度估计参数:bw(带宽参数),gridsize(用于计算核密度估计值的点数)
- innner参数:内部数据点表示方法
- None不显示内部
- box默认值,内部显示箱型图
- quartile,内部显示四分点
- point,内部在中心线显示所有点位置
- stick,内部用横线显示所有点位置
hue、dodge、orient与其他图形用法相同。split参数可以和hue结合,把2组图形分别绘制一半:
sns.catplot(data=tips, x="day", y="total_bill", kind="violin", hue="sex",split=True)
核密度估计参数改变会导致提琴轮廓变化。提琴轮廓实际上是kde曲线。
bw是kde的参数,值越小曲线越精细,线条弯曲越多。
sns.catplot(data=tips, x="day", y="total_bill", kind="violin", bw=0.2)
gridsize为整数。表示绘制kde的计算点数,实际上也是提琴轮廓点数,点越少,轮廓越不光滑。一般不建议自行设置。
sns.catplot(data=tips, x="sex", y="total_bill", kind="violin",inner=None)
sns.catplot(data=tips, x="sex", y="total_bill", kind="violin",inner="box")
sns.catplot(data=tips, x="sex", y="total_bill", kind="violin",inner="quartile")
sns.catplot(data=tips, x="sex", y="total_bill", kind="violin",inner="point")
sns.catplot(data=tips, x="sex", y="total_bill", kind="violin",inner="stick")
5. 分类估计图
5.1 barplot
barplot()
:柱形图catplot(kind=“bar”)- hue参数:分组按不同颜色绘图
- dodge参数:是否将不同的组分开绘制
- orient参数:“v”|“h”,设置boxen图方向
- errwidth参数:误差线宽度
- capsize参数:误差线端部大小
- ci参数:误差线置信区间0—100
- estimator参数:估计函数,也就是计算柱形图高度值的参数。
hue、dodge和orient参数与其他函数相同。
sns.catplot(data=tips, x="day", y="total_bill", kind="bar", hue="sex", dodge=True)
errwidth、capsize和ci参数是针对柱形图顶部误差线的:
sns.catplot(data=tips, x="day", y="total_bill", kind="bar", capsize=0.3, errwidth=5, ci=50)
默认柱形图高度为平均值,estimator参数可以设置确定柱形图高度的函数。
sns.catplot(data=tips, x="day", y="total_bill", kind="bar", estimator=max)
5.2 pointplot
pointplot()
:柱形图catplot(kind=“point”)- hue参数:分组按不同颜色绘图
- dodge参数:是否将不同的组分开绘制
- orient参数:“v”|“h”,设置boxen图方向
- errwidth参数:误差线宽度
- capsize参数:误差线端部大小
- ci参数:误差线置信区间0—100
- estimator参数:估计函数,也就是计算柱形图高度值的参数。
- join参数:是否绘制折线,False就只绘制误差线。
hue、dodge、orient、errwidth、capsize、ci、estimator参数与barplot相同。
sns.catplot(data=tips, x="day", y="total_bill", kind="point")
sns.catplot(data=tips, x="day", y="total_bill", kind="point", join=False)
5.3 countplot
pointplot()
:柱形图catplot(kind=“point”)- hue参数:分组按不同颜色绘图
- dodge参数:是否将不同的组分开绘制
- orient参数:“v”|“h”,设置boxen图方向
sns.catplot(data=tips, x="day", kind="count", hue="sex")
palette, facecolor, linewidth, edgecolor等matplotlib基本样式设置参数也同样适用于以上函数。
height, aspect等参数同样适用。
个人总结,部分内容进行了简单的处理和归纳,如有谬误,希望大家指出,持续修订更新中。
修订历史版本见:https://github.com/hustlei/AI_Learning_MindMap
未经允许请勿转载。