Seaborn 使用教程

转载::https://blog.csdn.net/mengenqing/article/details/80658163

Matplotlib试着让简单的事情更加简单,困难的事情变得可能,而Seaborn就是让困难的东西更加简单。

用Matplotlib最大的困难是其默认的各种参数,而Seaborn则完全避免了这一问题。

seaborn是针对统计绘图的,一般来说,seaborn能满足数据分析90%的绘图需求,够用了,如果需要复杂的自定义图形,还是要Matplotlib。

第一,单变量单特征数据分析图---直方图


   
   
  1. import numpy as np
  2. import seaborn as sns
  3. from scipy import stats, integrate
  4. %matplotlib inline
  5. sns.set(color_codes= True)
  6. np.random.seed(sum(map(ord, "distributions"))) #每次产生的随机数相同
  7. x = np.random.gamma( 6, size= 200)
  8. sns.distplot(x, kde= False, fit=stats.gamma)

第二,散点图:观测两个变量之间的分布关系最好的图之一


   
   
  1. import numpy as np
  2. import pandas as pd
  3. import seaborn as sns
  4. import matplotlib.pyplot as plt
  5. from scipy import stats, integrate
  6. %matplotlib inline
  7. sns.set(color_codes= True)
  8. mean, cov = [ 0.5, 1], [( 1, .5),( .5, 1)] #设置均值(一组参数)和协方差(两组参数)
  9. data = np.random.multivariate_normal(mean, cov, 200)
  10. df = pd.DataFrame(data, columns=[ "x", "y"])
  11. print(df.head())
  12. sns.jointplot(x= "x", y= "y", data=df)
  13. plt.show()

数据量大的情况下,用hex散点图


   
   
  1. import numpy as np
  2. import pandas as pd
  3. import seaborn as sns
  4. import matplotlib.pyplot as plt
  5. from scipy import stats, integrate
  6. %matplotlib inline
  7. sns.set(color_codes= True)
  8. mean, cov = [ 0, 1], [( 1, .5), ( .5, 1)]
  9. x, y = np.random.multivariate_normal(mean, cov, 1000).T
  10. with sns.axes_style( "ticks"):
  11. sns.jointplot(x=x, y=y, kind= "hex", color= "k")
  12. plt.show()

第三,比较图:观察变量两两之间的关系


   
   
  1. import numpy as np
  2. import pandas as pd
  3. import seaborn as sns
  4. import matplotlib.pyplot as plt
  5. from scipy import stats, integrate
  6. %matplotlib inline
  7. sns.set(color_codes= True)
  8. iris = sns.load_dataset( "iris")
  9. sns.pairplot(iris) #对角线是直方图(统计数量),其他的是散点图
  10. print(iris.head( 2))
  11. plt.show()

第四,回归分析图

regplot()和lmplot()都可以绘制回归关系,推荐regplot()

regplot()lmplot()都可以绘制线性回归曲线。这两个函数非常相似,甚至共有一些核心功能。我将着力讲解二者的区别,这会帮助你选用恰当的工具。 

在最简单的调用中,两个函数都会画出双变量的散点图,然后以y~x拟合回归方程和预测值95%置信区间并将其画出。

两者间主要的区别是,regplot接受各种格式的x y,包括numpy arrays ,pandas series 或者pandas Dataframe对象。相比之下,lmplot()只接受字符串对象。这种数据格式被称为’long-form’或者’tidy’。除了输入数据的便利性外,regplot()可以看做拥有lmplot()特征的一个子集,所以接来下我们将用lmplot()进行演示。

公共头文件:


   
   
  1. %matplotlib inline
  2. import numpy as np
  3. import pandas as pd
  4. import matplotlib as mpl
  5. import matplotlib.pyplot as plt
  6. import seaborn as sns
  7. sns.set(color_codes= True)
  8. np.random.seed(sum(map(ord, "regression")))


   
   
  1. tips = sns.load_dataset( "tips")
  2. print(tips.head( 2))
  3. sns.regplot(x= "total_bill", y= "tip", data=tips)
  4. plt.show()

当数据具有高阶关系时,lmplot()regplot可以用多项式回归来来简单探索数据间的非线性关系:


   
   
  1. anscombe = sns.load_dataset( "anscombe")
  2. sns.lmplot(x= "x", y= "y", data=anscombe.query( "dataset == 'II'"),
  3. order= 2, ci= None, scatter_kws={ "s": 80})
  4. plt.show()

采用robust回归解决忽略异常点,即:在拟合曲线的时候不考虑这个点:


   
   
  1. anscombe = sns.load_dataset( "anscombe")
  2. sns.lmplot(x= "x", y= "y", data=anscombe.query( "dataset == 'III'"),
  3. robust= True, ci= None, scatter_kws={ "s": 80})
  4. plt.show()

三个变量回归图的比较:


   
   
  1. tips = sns.load_dataset( "tips")
  2. sns.lmplot(x= "total_bill", y= "tip", hue= "smoker",
  3. col= "time", row= "sex", data=tips)
  4. plt.show()

jointplot()可以通过传递kind =”reg”来显示关键子图的线性回归拟合


   
   
  1. sns.jointplot(x= "total_bill", y= "tip", data=tips, kind= "reg")
  2. plt.show()

第五,多变量分析及分类属性绘图

树形图分析的功能类似于散点图,显示每个数据


   
   
  1. tips = sns.load_dataset( "tips")
  2. sns.swarmplot(x= "day", y= "total_bill",hue= "sex",data=tips)
  3. plt.show()

小提琴图:


   
   
  1. sns.violinplot(x= "day", y= "total_bill", hue= "sex", data=tips, split= True) #hue是用来分类的,去掉hue="sex" 和split=True, 不影响图的形状,只是没有分类而已
  2. plt.show()

小提琴和树形混合图:


   
   
  1. sns.violinplot(x= "day", y= "total_bill",hue= "sex", data=tips, split= True )
  2. sns.swarmplot(x= "day", y= "total_bill", data=tips, color= "k", alpha= .5)
  3. plt.show()

盒图:


   
   
  1. sns.boxplot(x= "day", y= "total_bill", hue= "time", data=tips)
  2. plt.show()

第六,FacetGrid及绘制多变量


   
   
  1. g = sns.FacetGrid(tips, row= "smoker", col= "time", margin_titles= True)
  2. g.map(sns.regplot, "size", "total_bill", color= ".1", fit_reg= False, x_jitter= .2)
  3. plt.show()

指定画图的顺序:利用Categorical指定


   
   
  1. from pandas import Categorical
  2. ordered_days = tips.day.value_counts().index
  3. print (ordered_days)
  4. ordered_days = Categorical([ 'Thur', 'Fri', 'Sat', 'Sun'])
  5. g = sns.FacetGrid(tips, row= "day", row_order=ordered_days,
  6. size= 1.7, aspect= 4,)
  7. g.map(sns.boxplot, "total_bill")
  8. plt.show()

可指定对角线和非对角线画的图形种类:


   
   
  1. iris = sns.load_dataset( "iris")
  2. g = sns.PairGrid(iris, hue= "species")
  3. g.map_diag(plt.hist) #指定对角线画的图的类型
  4. g.map_offdiag(plt.scatter) #指定非对角线画的图的类型
  5. #g.map(plt.scatter)#如果所有图的用以中类型,则用这个搞定
  6. g.add_legend() #加图例
  7. print(iris.head( 2))
  8. plt.show()

第七,热度图


   
   
  1. %matplotlib inline
  2. import matplotlib.pyplot as plt
  3. import numpy as np; 
  4. np.random.seed( 0)
  5. import seaborn as sns;
  6. sns.set()
  7. uniform_data = np.random.randn( 3, 3)
  8. print (uniform_data)
  9. heatmap = sns.heatmap(uniform_data,vmin= -0.5, vmax= 0.9,center= 0,annot= True,fmt= "f",linewidths= .5)
  10. #vmin指定小于等于-0.5为一种颜色,vmax指定为大于等于0.9为一种颜色,center指定颜色以0向两侧变化
  11. #注释项annot=True,fmt=“d”即是在图上显示数据值,linwidth=.5加上一个格,这个图会比较更清晰
  12. plt.show()



   
   
  1. flights = sns.load_dataset( "flights")
  2. flights = flights.pivot( "year", "month", "passengers") #创建透视图,第一个参数为纵坐标,第二个参数为横坐标,第三个参数为值
  3. print (flights.head( 1))
  4. ax = sns.heatmap(flights, annot= True,fmt= "d",linewidths= .5)

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值