这篇文章是做实验楼的一个seaborn的实验,做的记录。
实验网址:https://www.lanqiao.cn/courses/892/learning/?id=3260
简介
seaborn是基于python下一个很优秀的画图的库matplotlib的进阶封装,主要在配色上更漂亮。下面这张图是matplotlib的。
下面的代码是用matplotlib画一个条形图和折线图。
import matplotlib.pyplot as plt
%matplotlib inline
x = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
y_bar = [3, 4, 6, 8, 9, 10, 9, 11, 7, 8]
y_line = [2, 3, 5, 7, 8, 9, 8, 10, 6, 7]
plt.bar(x, y_bar)
plt.plot(x, y_line, '-o', color='y')
在画图前加上sns.set()
就可以用seaborn美化matplotlib的图:
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
x = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
y_bar = [3, 4, 6, 8, 9, 10, 9, 11, 7, 8]
y_line = [2, 3, 5, 7, 8, 9, 8, 10, 6, 7]
plt.bar(x, y_bar)
plt.plot(x, y_line, '-o', color='y')
关联图
关联图是分析两类数据的之间的关系,也是比较常用的。seaborn提供了三个API画这个图:
- relplot
- scatterplot
- lineplot
relplot是relation plot的缩写。主要有散点图和条形图。下面用鸢尾花数据集来画个散点图。
import seaborn as sns
sns.set()
iris = sns.load_dataset("iris")
sns.relplot(x="sepal_length", y="sepal_width", data=iris)
加入类别这个维度~
sns.relplot(x="sepal_length",y="sepal_width",hue='species',data=iris)
不同类别显示不一样的形状~
sns.relplot(x="sepal_length",y="sepal_width",hue='species',data=iris,style="species")
在kind处设置为scatter或者line
sns.relplot(x="sepal_length",y="sepal_width",hue="species",style="species",kind="scatter",data=iris)
sns.relplot(x="sepal_length",y="sepal_width",hue="species",style="species",kind="line",data=iris)
类别图
类别图的接口是catplot(),类别图主要是用来看不同类别的数据情况。
主要分为以下三种:
- 分类散点图
- 分类分布图
- 分类估计图
分类散点图
画一个分类散点图,自变量为连续的值,因变量为种类这一离散的值。
sns.catplot(x="sepal_length", y="species", data=iris)
在kind参数设置swarm,更好地看数据分布。
sns.catplot(x="sepal_length", y="species", kind="swarm", data=iris)
分类分布图
绘制箱线图
sns.catplot(x="sepal_length",y="species",kind="box",data=iris)
绘制小提琴图,虽然并没有看出哪里像小提琴。
sns.catplot(x="sepal_length",y="species",kind="violin",data=iris)
绘制增强箱线图
sns.catplot(x="species", y="sepal_length", kind="boxen", data=iris)
分类估计图
绘制点线图
sns.catplot(x="sepal_length", y="species", kind="point", data=iris)
绘制条型图
sns.catplot(x="sepal_length", y="species", kind="bar", data=iris)
绘制计数条形图,可以看到这三类数据个数都为50
sns.catplot(x="species", kind="count", data=iris)
分布图
单变量分布
sns.distplot(iris["sepal_length"],kde=True,hist=False)
#等价于下面注释的方法
#sns.kdeplot(iris["sepal_length"])
sns.distplot(iris["sepal_length"],kde=False,hist=True)
二元变量分布
sns.jointplot(x="sepal_length",y="sepal_width",data=iris)
#等价于下面注释的方法
#sns.jointplot(x="sepal_length",y="sepal_width",data=iris,kind="scatter")
sns.jointplot(x="sepal_length",y="sepal_width",data=iris)
#等价于下面注释的方法
#sns.jointplot(x="sepal_length",y="sepal_width",data=iris,kind="kde")
sns.jointplot(x="sepal_length", y="sepal_width", data=iris,kind="hex")
sns.jointplot(x="sepal_length", y="sepal_width", data=iris,kind="reg")
无敌的pairplot
sns.pairplot(iris,hue="species")
回归图
- regplot
- lmplot (支持hue)
sns.regplot(x="sepal_length", y="sepal_width", data=iris)
sns.lmplot(x="sepal_length", y="sepal_width", data=iris,hue="species")
矩阵图
到这边我已经看不懂这图画的到底是啥了=_=
- heatmap(热力图)
- clustermap (层次聚类图)
import numpy as np
sns.heatmap(np.random.rand(5,5))
iris.pop("species")#把标签弹出去,
sns.clustermap(iris)#然后进行层次聚类
总结
参考链接
- seaborn官方文档:https://seaborn.pydata.org/api.html
- 实验楼seaborn数据可视化基础入门:https://www.lanqiao.cn/courses/892/learning/?id=3260