matplotlib是python最常见的绘图包,强大之处不言而喻。然而在数据科学领域,可视化库-Seaborn也是重量级的存在。


由于matplotlib比较底层,想要绘制漂亮的图非常麻烦,需要写大量的代码。


Seaborn是在matplotlib基础上进行了高级API封装,图表装饰更加容易,你可以用更少的代码做出更美观的图。同时,Seaborn高度兼容了numy、pandas、scipy等库,使得数据可视化更加方便快捷。


话不多说,先来展示一下Seaborn的风采:

数据科学:是时候该用seaborn画图了_java

热力图

数据科学:是时候该用seaborn画图了_java_02

小提琴图

数据科学:是时候该用seaborn画图了_java_03

散点矩阵图

数据科学:是时候该用seaborn画图了_java_04

多元散点图

数据科学:是时候该用seaborn画图了_java_05

带边际分布的Hexbin图



下面正式开始讲解如何使用Seaborn绘图


功能简介

Seaborn让coder专注于可视化分析,提供更多高级接口,无需将过多时间用于数据处理和图表装饰,一般而言,它主要有以下功能:

  • 计算多变量间关系的面向数据集接口
  • 可视化类别变量的观测与统计
  • 可视化单变量或多变量分布并与其子数据集比较
  • 控制线性回归的不同因变量并进行参数估计与作图
  • 对复杂数据进行易行的整体结构可视化
  • 对多表统计图的制作高度抽象并简化可视化过程
  • 提供多个内建主题渲染 matplotlib 的图像样式
  • 提供调色板工具生动再现数据



安装Seaborn安装最新版本的Seaborn非常简单,使用pip命令即可:

pip install seaborn
Python版本:3.6.xSeaborn的依赖库有:numpy、scipy、matplotlib、pandas


导入Seaborn库,一般使用:

import seaborn as sns


查看Seaborn版本:

sns.__version# 本文使用最新版本:0.9.0


风格管理Seaborn装载了一些默认主题风格,通过sns.set()方法实现。
sns.set()可以设置5种风格的图表背景:darkgrid, whitegrid, dark, white, ticks,通过参数style设置,默认情况下为darkgrid风格:


数据科学:是时候该用seaborn画图了_java_06


更改为whitegrid风格:


数据科学:是时候该用seaborn画图了_java_07


你还可以通过改变参数palette来调整颜色:


数据科学:是时候该用seaborn画图了_java_08


提示:有人会问上面的代码从哪加载数据集?是这样的,Seaborn会内置一些数据集,通过load_data()方法加载大家有兴趣可以去官方教程看看有哪些内置数据集本文都会用Seaborn内置数据集讲解案例


点、线混合绘图函数 - relplot()relplot()是seaborn中非常重要的绘图函数,它可以用于绘制散点图和线图,通过参数kind改变绘图类型。

  • 散点图:relplot(kind='scatter')
  • 线图:relplot(kind='line')
注:默认情况下为散点图

举个例子:数据科学:是时候该用seaborn画图了_java_09上面加载了内置数据集-tips(小费数据集),并对total_bill和tip字段绘制散点分布图。


tips数据集:


数据科学:是时候该用seaborn画图了_java_10


tips数据集字段说明:

  • total_bill:总消费
  • tip:小费
  • sex:性别
  • smoker:是否吸烟
  • day:周几
  • time:用餐类型


前面绘制了total_bill(总消费)和tip(小费)的散点关系图,我们可以清晰地看到这两者成正相关性。


如果在上面的基础上再区分时间,显示这次消费属于一周的周几,并用不同颜色标记点传递参数 hue='day':


数据科学:是时候该用seaborn画图了_java_11


性别不同会对这个分布关系产生影响,我们绘制男、女两张图表传递参数 col='sex':
数据科学:是时候该用seaborn画图了_java_12


性别不同、用餐类型也不同的情况下,分布是什么样的,可以绘制多张图表传递参数 col='sex',row='time':


数据科学:是时候该用seaborn画图了_java_13你也可以绘制线图,只需要传递参数kind='line':


数据科学:是时候该用seaborn画图了_java_14


lineplot()和scatter()函数lineplot()和scatter()分别用于绘制线图和散点图,前面说过relplot()函数已经覆盖这两个绘图功能,所以就不赘述了,有意者可以自研。


绘制线性回归模型-lmplot()函数lmplot()函数用以绘制回归模型,描述线性关系。
依然以小费数据集为例:
数据科学:是时候该用seaborn画图了_java_15这是一个散点图+线性回归+95%置性区间的组合图


你调整置性区间的大小,传递参数ci:60:


数据科学:是时候该用seaborn画图了_java_16


对smoker(是否吸烟)做分类处理,得到两个不同的回归曲线,传递参数 hue='smoker' :


数据科学:是时候该用seaborn画图了_java_17


绘制非参数回归模型(局部加权线性回归),传递参数 lowess=True:


数据科学:是时候该用seaborn画图了_java_18


分类散点图 - stripplot()函数  当有一维数据是分类数据时,散点图成了条带形状,这里就用到stripplot()函数。
数据科学:是时候该用seaborn画图了_java_19


箱图 - boxplot()函数箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。


它主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比 较。


箱线图的绘制方法是:

  • 先找出一组数据的最大值、最小值、中位数和两个四分位数;
  • 然后, 连接两个四分位数画出箱子;
  • 再将最大值和最小值与箱子相连接,中位数在箱子中间。


数据科学:是时候该用seaborn画图了_java_20



提琴图 - violinplot()函数小提琴图结合了箱型图和密度图的特征,用于展示数据的分布形状。粗黑线表示四分数范围,延伸的细线表示95%的置信区间,白点为中位数。
小提琴图弥补了箱型图的不足,可以展示数据分布是双模还是多模。


数据科学:是时候该用seaborn画图了_java_21
总结本介绍了Seaborn安装、风格配置以及各类绘图函数的使用,当然这里只是列举了小部分函数和功能,抛砖引玉,为展示seaborn的强大之处。希望Seaborn能成为大家数据科学路上的得力助手!