分类绘图
分类图的绘制,采用的是sns.catplot
来实现的。cat
是category
的简写。这个方法默认绘制的是分类散点图
,如果想要绘制其他类型的图,同样也是通过kind
参数来指定。并且分类绘图中,分成分类散点图,分类分布图,分类统计图。
一、分类散点图:
分类散点图比较适合数据量不是很多的情况,他是用catplot
来实现,但是也有以下两个特别的方法。
stripplot()
:catplot(kind="strip")
,默认的。swarmplot()
:catplot(kind="swarm")
。
1.1. stripplot:
示例代码如下:
sns.catplot(x="day",y="total_bill",data=tips,hue="sex")
示例图如下:
1.2. swarmplot:
以上图展示的是按照星期几的分类散点图,看起来这些点有点重合,如果想要散开来,那么可以使用catplot(kind="swarm")
。示例代码如下:
sns.catplot(x="day",y="total_bill",kind="swarm",data=tips,hue="sex")
catplot
方法不能使用size
和style
参数。
1.3. 横向分类散点图:
想要将垂直的分类散点图变成横向的,只需要把x
和y
对应的值进行互换即可。
sns.catplot(y="day",x="total_bill",kind="swarm",data=tips,hue="sex")
效果图如下:
二、分类分布图:
分类分布图,主要是根据分类来看,然后在每个分类下数据的分布情况。也是通过catplot
来实现,以下三个方法分别是不同的kind
参数:
boxplot()
:catplot(kind="box")
。violinplot()
:catplot(kind="violin")
。
2.1. 箱线图:
示例代码如下:
athletes = pd.read_csv("athlete_events.csv")
countries = {
'CHN':'中国',
'JPN':"日本",
'KOR':'韩国',
'USA':"美国",
'CAN':"加拿大",
'BRA':"巴西",
'GBR':"英国",
'FRA':"法国",
'ITA':"意大利",
'ETH':"埃塞俄比亚",
'KEN':"肯尼亚",
'NIG':"尼日利亚",
}
plt.rcParams['font.sans-serif'] = ['FangSong']
# print(plt.rcParams.keys())
need_athletes = athletes[athletes['NOC'].isin(list(countries.keys()))]
g = sns.catplot(x="NOC",y="Height",data=need_athletes,kind="box",hue="Sex")
g.fig.set_size_inches(20,5)
g.set_xticklabels(list(countries.values()))
效果图如下:
2.2. 小提琴图:
小提琴实际上就是两个对称的核密度曲线合并起来,然后中间是一个箱线图(也可以为其他图)组成的。通过小提琴图可以看出数据的分布情况。示例代码如下:
sns.catplot(x="day",y="total_bill",data=tips,kind="violin",hue="sex",split=True)
效果图如下:
小提琴的中间默认绘制的是箱线图,也可以修改为其他类型的。可以通过inner
参数修改,这个参数有以下几个选项:
box
:默认的,箱线图。quartile
:四分位数。上下四分位数加中位数。
point
:散点。
stick
:线条。
三、分类统计图:
分类统计图,则是根据分类,统计每个分类下的数据的个数或者比例。有以下几种方式:
barplot()
:catplot(kind="bar")
。pointplot()
:catplot(kind="point")
。countplot()
:catplot(kind="count")
。
3.1. 条形图:
seaborn
中的条形图具有统计功能,可以统计出比例,平均数,也可以按照你想要的统计函数来统计。示例代码如下:
-
统计平均数:
# 统计星期三到星期天的消费总额的平均数 sns.catplot(x="day",y="total_bill",data=tips,kind="bar")
-
统计比例:
# 统计男女中获救的比例 sns.catplot(data=titanic,kind="bar",x="sex",y="survived")
-
自定义统计函数:
# 自定义统计函数,统计出每个性别下获救的人数 sns.barplot(x="sex",y="survived",data=titanic,estimator=lambda values:sum(values))
3.2. 柱状图:
柱状图是专门用来统计某个单一变量出现数量的图形。示例代码如下:
sns.catplot(x="sex",data=titanic,kind="count")
也可以通过使用hue
参数来指定分组:
sns.catplot(x="day",kind="count",data=tips,hue="sex")
3.3. 点线图:
点线图可以非常方便的看到变量之间的趋势变化。示例代码如下:
sns.catplot(x="sex",y="survived",data=titanic,kind="point",hue="class")
效果图如下: