seaborn绘图

导语:

既然有了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()

  1. M:plt.bar(x,y)
  2. P:data.plot(kind="bar")
  3. 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

  1. M:plt.hist(data,bins=)
  2. P:data.plot(kind="hist",bins=)
  3. 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)

  1. M:plt.boxplot(data)
  2. P:data.plot(kind="box",)
  3. 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还可以再次分类

~散点图

  1. M:plt.scatter(x,y)
  2. P:data.plot(kind="scatter",x=,y=)
  3. 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也是分组,但能分别画图

原文地址:https://www.cnblogs.com/ye20190812/p/13497905.html