3.Seaborn分类数据绘图
3.1 catplot 类型
主要包含:
- 分类散点图
stripplot()(with kind="strip"; the default) catplot 默认图swarmplot()(with kind="swarm")
- 分类分布图
boxplot()(with kind="box")violinplot()(with kind="violin")boxenplot()(with kind="boxen")
- 分类估计图
pointplot()(with kind="point")barplot()(with kind="bar")countplot()(with kind="count")
3.2 分类散点图
catplot 参数与 relplot 绝大部分相同,主要不同参数如下
aspect每个面的纵横比orient方向,“v” | “h” 分别单标竖直方向和水平方向- 可以通过
jitter参数来控制重复点是否抖动绘制 - 注意:
catplot默认绘制分类散点图(左右有发散)
python
sns.catplot(x="day", y="total_bill", data=tips)
sns.catplot(x="day", y="total_bill", jitter=False, data=tips) #jitter=False关闭抖动

3.3 蜂群图
- 关键参数
x和y共同指定了分类基准 hue决定了颜色- 如果想绘制 swarm 散点图(非重叠分类散点图),需要指定
kind='swarm' - swarm 散点图的限制是数据集不能太大,否则无法完成不重叠的要求
- 调整
x和y,可以在视觉上使得分类散点图实现转置 hue参数可以使得颜色成为一个区分维度- catplot 绘图后,系列信息会展示在画板外侧
python
sns.catplot(x="day", y="total_bill", hue="sex", kind="swarm", data=tips)
# x与y对调即可绘制水平扫把图/蜂群图
sns.catplot(x="total_bill", y="day", hue="time", kind="swarm", data=tips);

➤ 分组蜂群图:
- 参数
col使得数据按照time列分组绘图 然后按照列的方向展开 aspect为图形的宽长比 (子图)
python
# 显示与facet的多种关系
sns.catplot(x="day", y="total_bill", hue="smoker",
col="time", aspect=.6,
kind="swarm", data=tips) # 按time展开列方向子图
➤ 分组蜂群图(2×2):
- 参数
row使得数据按照sex列分组绘图 然后按照行的方向展开 - 如果同时设置了
col和row参数 则会展示矩阵形状的图形集 - 观察右侧蓝色圆圈中的图例信息,可以判断出图形是先对数据集按照 row、col、hue 所对应的变量进行分组,再分别在各子图中绘制的
python
sns.catplot(x="day", y="total_bill", hue="smoker",
col="time", aspect=1.5, row="sex",
kind="swarm", data=tips) # 行列双维度展开图形矩阵
3.4 箱线图
- 指定参数
kind='box',catplot可以绘制箱线图 - 指定
x为分类基准 y为被计算的列需要计算y的中位数、上四分位数、下四分位数- 箱线图常用在数据 EDA 过程中来判断分类变量和连续变量见的相关关系
- 参数
hue会实现 2 个功能- 实现分组,并且分别绘制箱线图用颜色
- 将
hue列不同组的数据区分开 - 总结:可以实现“day” 和”smoker”两列交叉对比
- 如果
hue参数和 x 列存在包含关系,可以认为hue是针对 x 列进行一次强化展示 (新增了颜色信息) dodge参数:使用色调嵌套时,元素是否应沿分类轴移动,在这个例子中,因为 day 和 weekend 存在真包含关系,所以应该禁用 dodge,设置为 Falseboxenplot是增强箱线图,针可以理解为在boxplot基础上新增了很多分位数的计算,其余功能与boxplot相同- 如果想让每个系列颜色不同,可以指定
palette参数
python
sns.catplot(x="day", y="total_bill", kind="box", data=tips)
# sns.boxplot(x="day", y="total_bill", data=tips)
sns.catplot(x="day", y="total_bill", hue="smoker", kind="box", data=tips)
tips["weekend"] = tips["day"].isin(["Sat", "Sun"])
sns.catplot(x="day", y="total_bill", hue="weekend",
kind="box", dodge=False, data=tips)
sns.boxenplot(x="color", y="price",
data=diamonds.sort_values("color"), palette='Set2',
hue='color', legend=False)✏️ 信息
箱子中间的线为中位数,上方的点为一些异常点




➤ 水平箱线图:
- 水平方向的箱线图通过参数
orient来指定 - 如果没有指定
x和y那么就默认按照DataFrame的各个列来绘图 且自动区分颜色
python
sns.catplot(data=iris, orient="h", kind="box") # 绘制水平箱线图,自动按列分组上色iris.head():


3.5 小提琴图
- 小提琴图是通过展示密度曲线的方式来展示分布
hue参数会实现分组绘制小提琴图- 通过
catplot绘制小提琴图要指定kind='violin'
catplot + swarmplot 叠加图:
catplot的inner参数决定了小提琴图中间的箱子是否被画出来None意味着不画- 通过
ax=g.ax使得swarmplot也在小提琴图上绘图 size参数为标记的直径大小控制swarmplot点的大小
python
sns.catplot(x="total_bill", y="day", hue="time",
kind="violin", data=tips)
g = sns.catplot(x="day", y="total_bill", kind="violin", inner=None, data=tips)
sns.swarmplot(x="day", y="total_bill", color="k", size=3, data=tips, ax=g.ax)✏️ 信息
隆起的地方越靠右代表平均值越大,白色的线代表中位数


3.6 柱状图
(1) barplot 绘制
barplot参数hue作用与catplot相同barplot绘图后,系列信息的展示是在画板内部的
python
sns.barplot(x="sex", y="survived", hue="class", data=titanic)titanic.head():


(2) catplot 绘制
palette参数为指定的调色板legend参数设置为False则不显示系列信息- 参数
kind='count'则为计数统计图 - 其中
palette参数为 Matplotlib Colormap 的名字,例如ch:、hls、husl等
python
sns.catplot(x="deck", kind="count", palette="ch:.25",
data=titanic, hue="deck", legend=False) # legend=False不展示系列信息
(3) countplot 绘制
countplot参数与barplot完全相同- 指定
y参数 那么就按照y为分类变量去做统计count hue作用与catplot相同edgecolor为柱子边缘参数
python
sns.countplot(y="deck", hue="class",
palette="pastel", edgecolor=".6", # edgecolor设置边框
data=titanic)