导语:
既然有了matplotlib,那为啥还需要seaborn呢?其实seaborn是在matplotlib基础上进行封装,Seaborn就是让困难的东西更加简单。用Matplotlib最大的困难是其默认的各种参数,而Seaborn则完全避免了这一问题。seaborn是针对统计绘图的,一般来说,seaborn能满足数据分析90%的绘图需求,复杂的自定义图形,还是要Matplotlib。
导入数据
1 import seaborn as sns 2 import matplotlib.pyplot as plt 3 %matplotlib inline 4 plt.rcParams['font.sans-serif'] = ['SimHei']#显示中文 5 plt.rcParams['axes.unicode_minus'] = False#显示负号 6 import pandas as pd 7 import numpy as np 8 from pandas import Series,DataFrame 9 test=pd.read_excel("/Users/yaozhilin/Downloads/exercise.xlsx",sep="t") 10 test.head(5)#显示前五行
为了描述简便下面matplotlib-M,pandas-P和seaborn-S
~条形图:sns.barplot()
- M:plt.bar(x,y)
- P:data.plot(kind="bar")
- S:sns.baplot(x=,y=,data=,hue=)
1 ig,axes = plt.subplots(2,2,figsize=(8,8)) 2 sns.barplot(x="所属区域",y="数量",data=test,ax=axes[0,0]) 3 sns.barplot(x="所属区域",y="数量",data=test,ax=axes[0,1],ci=0)#ci=0去掉置信线 4 sns.barplot(x="所属区域",y="数量",data=test,ax=axes[1,0],hue="产品类别",ci=0)#用hue进行分组,非常实用
注:M与S语法一致但S传参数hue就可以分组,非常简便,而P默认index=x、values=y.
~直方图:distplot
- M:plt.hist(data,bins=)
- P:data.plot(kind="hist",bins=)
- S:sns.distplot(data,bins=,hist=,kde=,rug=)
Seaborn有一个强大的方法:distplot,它支持一些参数:
- bins:直方图的分块
- hist:True表示绘制直方图,默认为True
- kde:True表示绘制密度图,默认为True
- rug:显示分布情况,默认为False不显示
1 test.dropna(how='any',inplace=True)#去除缺失值 2 fig,axes = plt.subplots(2,2,figsize=(9,9)) 3 sns.distplot(test["数量"],ax=axes[0,0],color="green") 4 sns.distplot(test["数量"],ax=axes[0,1],color="black",kde=False)#只画直方图 5 sns.distplot(test["数量"],ax=axes[1,0],color="blue",hist=False)#只kde图 6 sns.distplot(test["数量"],ax=axes[1,1],color="green",rug=True)#加抖动rug
~箱型图sns.boxplot(x,y,data)
- M:plt.boxplot(data)
- P:data.plot(kind="box",)
- S:sns.boxplot(x=,y=,data,hue=)
M对一列数作箱型图,P中data若是多列则每列都是一个箱型图,S则是将x分为y组出多个箱型图也能加参数hue再次分组。
单个箱型图
1 sns.boxplot(y='数量',data=test,color="green")#传一个变量,即不分类,若传只传x为水平图
多个箱型图:传入x,x有几类就有几个图
1 sns.boxplot(x='所属区域',y='数量',data=test)#按“所属区域”画“数量”的箱型图
1 sns.boxplot(x='所属区域',y='数量',data=test,hue="产品类别")#hue还可以再次分类
~散点图
- M:plt.scatter(x,y)
- P:data.plot(kind="scatter",x=,y=)
- S:sns.scatterplot(x=,y=,data,hue=)
只有S中X可以为分类变量,做出类似箱型图的点图,而且可以传残hue进行分类。
1 sns.scatterplot(x="所属区域",y="数量",data=test)
1 sns.scatterplot(x="所属区域",y="数量",data=test,hue="产品类别")#hue分类
sns.swarmplot()和sns.stripplot()更为美观
1 sns.swarmplot(x="所属区域",y="数量",data=test,hue="产品类别")#hue分类
1 sns.stripplot(x="所属区域",y="数量",data=test,hue="产品类别",split=True)#split将点打散
变量关系图
sns.jointplot(x=,y=,data=,kind=)
kind的类型"scatter" 、"reg" 、"resid" 、"kde" 、 "hex"
下面我们看看test中成本和金额的关系图
1 sns.jointplot(x="成本",y="金额",data=test)
默认kind=scatter,看看kind=kde
1 sns.jointplot(x="成本",y="金额",data=test,kind="kde")#kind="kde"密度曲线图
kind=reg为回归图,看看成本和售价回归图是否可以很好的拟合
1 sns.jointplot(x="成本",y="金额",data=test,kind="reg")#kind="reg"回归图
~sns.pairplot(data)
所有变量俩俩画图
1 sns.pairplot(test)
diag_kind调整图形样式
1 sns.pairplot(test,diag_kind="kde")
vas=[]控制要画图的数据
1 sns.pairplot(test,diag_kind="kde",vars=["数量","金额"])
hue进行分组
sns.pairplot(test,diag_kind="kde",vars=["数量","金额"],hue="所属区域")#hue进行分类
~sns.lmplot()
参数:x=,y=,data=,order:次数,robust:鲁棒性,ci:置信度,hue:分组,col:分组并且图像拆分
探究test中金额与数量的回归图:
1 sns.lmplot(x="金额",y="数量",data=test)#默认线型回归
robust:忽略异常点
1 sns.lmplot(x="金额",y="数量",data=test,robust=True)#robust=True忽略异常点,让图形具有鲁棒性
hue分组
col相当于分开画图的hue
1 sns.lmplot(x="金额",y="数量",data=test,col="产品类别")#col也是分组,但能分别画图