python绘图之seaborn 笔记
前段时间学习了梁斌老师的数据分析(升级版)第三讲<探索性数据分析及数据可视化>,由于之前一直比较忙没有来得及总结,趁今天是周末有点闲暇时间,整理一下笔记:
什么是seaborn
Seaborn是一种基于matplotlib的Python绘图工具库。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的,信息量大的统计图表。
在大多数情况下使用seaborn就能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。应该把Seaborn视为matplotlib的补充,而不是替代物。同时它能高度兼容numpy与pandas数据结构以及scipy与statsmodels等统计模式的可视化。
特点:
- 多个内置主题及颜色主题
- 可视化单一变量,二位变量用于比较数据
- 可视化线性回归模型中的独立变量及不独立变量
- 可视化矩阵数据, 通过聚类算法探究矩阵间的结构
- 可视化时间序列数据及不确定性的展示
- 可在分割区域制图,用于复杂的可视化
安装
pip install seaborn
如果是在Anaconda环境下,打开Anaconda prompt:
conda install seaborn
数据集分布可视化
1 单变量分布 seaborn.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None, hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, color=None, vertical=False, norm_his t=False, axlabel=None, label=None, ax=None)
a : series或一维数组或列表类型的数据
bins :设置矩形条的数量
hist :控制是否显示条形图
kde :控制是否显示核密度估计图
rug :控制是否显示观测的小细条(边际毛毯)
fit :控制拟合的参数分布图形
vertical : 显示正交控制
import numpy as np import pandas as pd from scipy import stats import matplotlib.pyplot as plt import seaborn as sns //注意:一旦导入了seaborn,matplotlib的默认作图风格就会被覆盖成seaborn的格式
sns.set_style("dark") #设置背景色为黑色
%matplotlib inline
// 准备数据
x1 = np.random.normal(size = 1000) x2 = np.random.randint(0, 50, 200)
直方图
sns.distplot(x1, bins=20, kde=True,rug=True)
核密度估计(核密度估计是在概率论中用来估计未知的密度函数,属于非参数检验方法之一。)
sns.distplot(x2, hist=False, rug=True)
sns.kdeplot(x2, shade=True) //shade控制阴影
sns.rugplot(x2)
拟合参数分布
x = np.random.gamma(6, size=200)#生成gamma分布的数据
sns.distplot(x, kde=False, fit=stats.gamma);#fit拟合
2 双变量分布
// 准备数据 df1 = pd.DataFrame({"x": np.random.randn(200), "y": np.random.randn(200)}) df2 = pd.DataFrame({"x": np.random.randn(200), "y": np.random.randint(0, 100, 200)})
散布图
sns.jointplot(x="x", y="y", data=df1)
二维直方图
sns.jointplot(x="x", y="y", data=df_obj1, kind="hex")
核密度估计
sns.jointplot(x="x", y="y", data=df_obj1, kind="kde")
3 数据集中变量间关系可视化
seaborn可以一次性两两组合多个变量做出多个对比图,有n个变量,就会做出一个n × n个格子的图,譬如有2个变量,就会产生4个格子,每个格子就是两个变量之间的对比图
- var1 vs var1
- var1 vs var2
- var2 vs var1
- var2 vs var2
相同的两个变量之间(var1 vs var1 和 var2 vs var2)以直方图展示,不同的变量则以散点图展示(var1 vs var2 和var2 vs var1)
要注意的是数据中不能有NaN(缺失的数据),否则会报错
dataset = sns.load_dataset("tips")
sns.pairplot(dataset)
类别数据可视化
// 准备数据
data = sns.load_dataset('exercise')
数据类型如下:
Unnamed: 0 id diet pulse time kind 0 0 1 low fat 85 1 min rest 1 1 1 low fat 85 15 min rest 2 2 1 low fat 88 30 min rest 3 3 2 low fat 90 1 min rest 4 4 2 low fat 92 15 min rest
1 类别散点图
sns.stripplot(x="diet", y="pulse", data=data) //数据点会重叠
sns.swarmplot(x="diet", y="pulse", data=data, hue='kind')//数据点不重叠
2 类别内数据分布
箱型图
sns.boxplot(x="diet", y="pulse", data=data)
小提琴图
sns.violinplot(x="diet", y="pulse", data=data, hue='kind') // hue 指定子类别
3 类别内统计图
柱状图
sns.barplot(x="diet", y="pulse", data=data, hue='kind')
点图
sns.pointplot(x="diet", y="pulse", data=data, hue='kind')
Seaborn的API:https://stanford.edu/~mwaskom/software/seaborn/api.html#style-frontend