分类图的绘制,采用的是sns.catplot来实现的。cat是category的简写。这个方法默认绘制的是分类散点图,如果想要绘制其他类型的图,同样也是通过kind参数来指定。并且分类绘图中,分成分类散点图,分类分布图,分类统计图。
catplot方法不能使用size和style参数

分类散点图

  1. stripplot和swarmplot。
  2. swramplot采用了一定的算法,可以让点不会重叠。
  3. 分类散点图,特别是swarmplot,不太适合数据量特别大的,否则不太美观。 ```python import seaborn as sns import pandas as pd import numpy as np import matplotlib.pyplot as plt

tips = pd.read_csv(“dataset/tips.csv”) tips.head() ‘’’ total_bill tip sex smoker day time size 0 16.99 1.01 Female No Sun Dinner 2 1 10.34 1.66 Male No Sun Dinner 3 2 21.01 3.50 Male No Sun Dinner 3 3 23.68 3.31 Male No Sun Dinner 2 4 24.59 3.61 Female No Sun Dinner 4 ‘’’ sns.catplot(x=”day”,y=”total_bill”,data=tips,hue=”sex”)

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/1862552/1638351899417-eab99c3e-9ed2-4177-895c-a9a9e89877cd.png#clientId=ue7cdfa55-bcdf-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=464&id=ue9afc2c9&margin=%5Bobject%20Object%5D&name=image.png&originHeight=469&originWidth=535&originalType=binary&ratio=1&rotation=0&showTitle=false&size=47990&status=done&style=none&taskId=u2625419e-da03-43c2-9b65-4850a1d17aa&title=&width=529.5)<br />以上图展示的是按照星期几的分类散点图,看起来这些点有点重合,如果想要散开来,那么可以使用catplot(kind="swarm")
  2. ```python
  3. sns.catplot(x="day",y="total_bill",data=tips,kind="swarm",hue="sex")

image.png
想要将垂直的分类散点图变成横向的,只需要把x和y对应的值进行互换即可。

sns.catplot(y="day",x="total_bill",kind="swarm",data=tips,hue="sex")

image.png

分类分布图

箱线图:boxplot或者是catplot(kind=”box”)。然后使用hue参数可以进行分组。
小提琴图:violinplot或者是catplot(kind=”violin”)。小提琴图是由KDE曲线(核密度估计曲线)绘制而成。inner参数可以控制小提琴中的图,可以为box,quartile,stick,point。可以使用hue参数来进行分组,并且可以指定split=True,来将整个小提琴分割开来进行展示。

箱线图

athletes = pd.read_csv("athlete_events.csv")
countries = {
    'CHN':'中国',
    'JPN':"日本",
    'KOR':'韩国',
    'USA':"美国",
    'CAN':"加拿大",
    'BRA':"巴西",
    'GBR':"英国",
    'FRA':"法国",
    'ITA':"意大利",
    'ETH':"埃塞俄比亚",
    'KEN':"肯尼亚",
    'NIG':"尼日利亚",
}
my_athletes = athletes[athletes['NOC'].isin(list(countries.keys()))]
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(20,5))
sns.boxplot(x="NOC",y="Height",data=my_athletes,hue="Sex")
#g = sns.catplot(x="NOC",y="Height",data=need_athletes,kind="box",hue="Sex")
#g.fig.set_size_inches(20,5)  # 如果使用catplot绘图,那么得使用这个方法设置fig的尺寸
plt.xticks(range(len(countries.values())),countries.values())

image.png

小提琴图

小提琴实际上就是两个对称的核密度曲线合并起来,然后中间是一个箱线图(也可以为其他图)组成的。通过小提琴图可以看出数据的分布情况。

sns.violinplot(x="day",y="total_bill",data=tips,hue="sex",split=True)

image.png
小提琴的中间默认绘制的是箱线图,也可以修改为其他类型的。可以通过inner参数修改,这个参数有以下几个选项:

  1. box:默认的,箱线图。
  2. quartile:四分位数。上下四分位数加中位数。

image.png

  1. point:散点。

image.png

  1. stick:线条。

image.png

分类统计图

  1. 条形图:barplot,他会自动进行统计(平均数、比例等),也可以通过estimator参数来修改统计函数。
  2. 柱状图:countplot,只能统计某个变量数据的个数。x和y只能传一个。
  3. 点线图:pointplot,可以看出某个变量的变化关系。

    条形图

    seaborn中的条形图具有统计功能,可以统计出比例,平均数,也可以按照你想要的统计函数来统计。
    统计平均数
    # 统计星期三到星期天的消费总额的平均数
    sns.catplot(x="day",y="total_bill",data=tips,kind="bar")
    # 上面黑色的线条代表置信度,越长代表数据越离散
    
    image.png
    统计比例 ```python titanic = pd.read_csv(“dataset/titanic.csv”) titanic.head() ‘’’ survived pclass sex age sibsp parch fare embarked class who adult_male deck embark_town alive alone 0 0 3 male 22.0 1 0 7.2500 S Third man True NaN Southampton no False 1 1 1 female 38.0 1 0 71.2833 C First woman False C Cherbourg yes False 2 1 3 female 26.0 0 0 7.9250 S Third woman False NaN Southampton yes True 3 1 1 female 35.0 1 0 53.1000 S First woman False C Southampton yes False 4 0 3 male 35.0 0 0 8.0500 S Third man True NaN Southampton no True ‘’’

统计男女中获救的比例

sns.catplot(data=titanic,kind=”bar”,x=”sex”,y=”survived”)

![image.png](https://cdn.nlark.com/yuque/0/2021/png/1862552/1638359445236-8f70f44b-3097-498e-acf3-3b8a50cfd967.png#clientId=ue7cdfa55-bcdf-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=344&id=u78b78e73&margin=%5Bobject%20Object%5D&name=image.png&originHeight=397&originWidth=421&originalType=binary&ratio=1&rotation=0&showTitle=false&size=13874&status=done&style=none&taskId=u5564a65a-5367-482d-931c-98f11cd08f3&title=&width=364.5)<br />使用自定义函数
```python
# 按日期统计支付金额之和
sns.catplot(x="day",y="total_bill",data=tips,kind="bar",estimator=sum)

image.png

# 自定义统计函数,统计出每个性别下获救的人数
sns.barplot(x="sex",y="survived",data=titanic,estimator=lambda values:sum(values))

image.png

柱状图

柱状图是专门用来统计某个单一变量出现数量的图形。
如果想绘制横向的柱状图,就设定y的值,不设定x

sns.catplot(x="sex",data=titanic,kind="count")

image.png
也可以通过使用hue参数来指定分组

sns.catplot(x="day",kind="count",data=tips,hue="sex")

image.png

点线图

点线图可以非常方便的看到变量之间的趋势变化。

sns.catplot(x="sex",y="survived",data=titanic,kind="point",hue="class")

image.png