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. 目录 1. 目录 2 2. 绘图函数Plotting functions 4 2.1. 可视化的统计关系Visualizing statistical relationships 4 2.1.1. 用散点图联系变量Relating variables with scatter plots 4 2.1.2. 强调线条图的连续性Emphasizing continuity with line plots 10 2.1.3. 显示与切面的多个关系Showing multiple relationships with facets 21 2.2. 分类数据绘图Plotting with categorical data 24 2.2.1. 分类散点图Categorical scatterplots 26 2.2.2. 分类观测值分布Distributions of observations within categories 31 2.2.3. 分类统计估计Statistical estimation within categories 37 2.2.4. 对“wide-form”数据作图Plotting “wide-form” data 41 2.2.5. 显示与facet的多个关系Showing multiple relationships with facets 43 2.3. 可视化数据集的分布Visualizing the distribution of a dataset 44 2.3.1. 绘制单变量分布Plotting univariate distributions 45 2.3.2. 绘制二元分布Plotting bivariate distributions 51 2.3.3. 在数据集中可视化成对关系Visualizing pairwise relationships in a dataset 55 2.4. 可视化线性关系Visualizing linear relationships 57 2.4.1. 函数绘制线性模型Functions to draw linear regression models 58 2.4.2. 拟合不同种类的模型Fitting different kinds of models 61 2.4.3. 在其他变量上的情况Conditioning on other variables 68 2.4.4. 控制图表的大小和形状Controlling the size and shape of the plot 71 2.4.5. 在其他上下文中绘制回归图Plotting a regression in other contexts 73 3. 多图网格Multi-plot grids 76 3.1. 构建结构化的多图网格Building structured multi-plot grids 76 3.2. 有条件的小倍数Conditional small multiples 77 3.3. 使用定制函数Using custom functions 86 3.4. 绘制成对的数据关系Plotting pairwise data relationships 90 4. 绘图美学Plot aesthetics 99 4.1. 控制图表美学Controlling figure aesthetics 99 4.1.1. Seaborn图表风格Seaborn figure styles 101 4.1.2. 删除轴上的小凸起Removing axes spines 104 4.1.3. 临时设置图表样式Temporarily setting figure style 105 4.1.4. 覆盖Seaborn样式的元素Overriding elements of the seaborn styles 106 4.1.5. 缩放图表元素Scaling plot elements 108 4.2. 选择调色板Choosing color palettes 111 4.2.1. 创建颜色调色板Building color palettes 111 4.2.2. 定性调色板Qualitative color palettes 112 4.2.3. 连续调色板Sequential color palettes 116 4.2.4. 不同颜色的调色板Diverging color palettes 122 4.2.5. 设置默认调色板Setting the default color palette 124 5. 教程中的数据集 125
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值