Reference:https://zhuanlan.zhihu.com/p/49035741

- 为什么用 Seaborn -

​ Seaborn 是基于 Python 且非常受欢迎的图形可视化库,在 Matplotlib 的基础上,进行了更高级的封装,使得作图更加方便快捷。即便是没有什么基础的人,也能通过极简的代码,做出具有分析价值而又十分美观的图形。

​ Seaborn 可以实现 Python 环境下的绝大部分探索性分析的任务,图形化的表达帮助你对数据进行分析,而且对 Python 的其他库(比如 Numpy/Pandas/Scipy)有很好的支持。

- Seaborn 绘图上手 -

​ 安装 Matplotlib, Seaborn

pip install matplotlib
pip install seaborn

​ 先来一段基本的代码:

import seaborn as sns  # 导入绘图模块
import matplotlib.pyplot as plt
%matplotlib inline # 这里的 “%matplot inline” 是为了在 Jupyter 中正常显示图形,若没有这行代码,图形显示不出来的
titanic=sns.load_dataset('titanic') # 内置于 Seaborn的数据(内置数据都可以用此方法导入) 地址:https://github.com/mwaskom/seab
sns.barplot(x='class',y='survived',data=titanic) # barplot 表示输出条形图

- Seaborn 图形可视化 -

01 **distplot ** 直方图

​ 通常我们在分析一组数据时,首先要看的就是变量的分布规律,而直方图则提供了简单快速的方式,在 Seaborn 中可以用 distplot() 实现。我们首先导入数据集 ‘titanic’,并查看随机的10行数据,对数据集有一个初步的印象:

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

#导数数据集'titanic'
titanic=sns.load_dataset('titanic')

#查看数据集的随机10行数据,用sample方法
titanic.sample(10)

02 **barplot ** 条形图

​ barplot() 利用矩阵条的高度反映数值变量的集中趋势,以及使用errorbar功能(差棒图)来估计变量之间的差值统计(置信区间)。需要提醒的是 barplot() 默认展示的是某种变量分布的平均值(可通过参数修改为 max、median 等)。

​ 这里我们仍然以’titanic’数据集作为展示,将’class’设为x轴,’survived’设为y轴。

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

#导入数据集'titanic',命名为'titanic'
titanic=sns.load_dataset('titanic')

#将'class'设为x轴,'survived'为y轴,传入'titanic'数据
sns.barplot(x='class',y='survived',data=titanic)

03 countplot 计数图

​ countplot 故名思意,计数图,可将它认为一种应用到分类变量的直方图,也可认为它是用以比较类别间计数差。当你想要显示每个类别中的具体观察数量时,countplot 很容易实现,比较类似我们在 Excel 等软件中应用的条形图。

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
titanic=sns.load_dataset('titanic')

sns.countplot(x='deck',data=titanic)

04 **stripplot/swarmplot ** 散点图

​ 在seaborn中有两种不同的分类散点图。stripplot() 使用的方法是用少量的随机“抖动”调整分类轴上的点的位置,swarmplot() 表示的是带分布属性的散点图。

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
titanic=sns.load_dataset('titanic')

sns.stripplot(x='embarked',y='fare',data=titanic)

05 boxplot 箱线图

​ boxplot(箱线图)是一种用作显示一组数据分散情况的统计图。它能显示出一组数据的最大值、最小值、中位数及上下四分位数。因形状如箱子而得名。这意味着箱线图中的每个值对应于数据中的实际观察值。

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
titanic=sns.load_dataset('titanic')

sns.boxplot(x='class',y='age',data=titanic)

06 violinplot 小提琴图

​ 小提琴图其实是箱线图与核密度图的结合,箱线图展示了分位数的位置,小提琴图则展示了任意位置的密度,通过小提琴图可以知道哪些位置的密度较高。

​ 在图中,白点是中位数,黑色盒型的范围是下四分位点到上四分位点,细黑线表示须。外部形状即为核密度估计。

​ 与箱线图进行对比,同样以’titanic’数据集为例,我们来探索不同的’class’(船舱)下乘客的’age’(年龄)情况。

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
titanic=sns.load_dataset('titanic')

sns.violinplot(x='class',y='age',data=titanic)

07 regplot/lmplot 回归图

​ Seaborn 中利用 regplot() 和 lmplot() 来进行回归,确定线性关系,它们密切相关,共享核心功能,但也有明显的不同。

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

#导入数据集'iris'
iris=sns.load_dataset('iris')

#随机查看数据集的10行数据
iris.sample(10)
sns.regplot(x='sepal_length',y='petal_length',data=iris)

08 **heatmap ** 热力图

 热力图通常用来表示特征之间的相关性,一般通过颜色的深浅来表示数值的大小或者相关性的高低。
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
flights = sns.load_dataset("flights")
flights.head(10)

f=flights.pivot('year','month','passengers') # 以'year'为纵轴,'month'为横轴,'passengers'的值为标准绘制热力图
sns.heatmap(f)
sns.heatmap(f, annot=True,fmt="d") # 如果要显示具体的数值,可以通过'annot'参数来控制

- 图形控制的艺术 -

​ 前面我们利用 Seaborn 绘制了各种类型的图形,对于基本的快速分析,其实已经足够,但是在细节的调节、颜色、美观度等方面我们还可以进行精细化的控制

图形背景

​ Seaborn 中有 white / whitegrid / dark / darkgrid / ticks 几种样式,用 set_style() 函数控制,分别如下:whitegrid 白色网格背景、white 白色背景(默认)、darkgrid 黑色网格背景、dark 黑色背景、ticks 四周带有刻度的白色背景

# 设为白色网格背景
sns.set_style("whitegrid")
sns.boxplot(data=data)
# 设为黑色网格背景
sns.set_style("darkgrid")
sns.boxplot(data=data)

调色板

​ seaborn 中的分类色板,主要用 color_palette() 函数控制,color_palette() 不写参数则显示为 Seaborn 默认颜色。如果需要设置所有图形的颜色,则用 set_palette() 函数定义。

​ Seaborn 中6个默认的颜色循环主题分别为: deep, muted, pastel, bright, dark, colorblind

# 设置颜色模式为'deep'
sns.boxplot(data=data,palette=sns.color_palette('deep'))

显示中文

​ Seaborn 对中文的显示不太友好,如果在遇到乱码问题时,可以加入下面的代码

# 指定默认字体
mpl.rcParams['font.sans-serif'] = ['SimHei']

# 解决保存图像是负号'-'显示为方块的问题
mpl.rcParams['axes.unicode_minus'] = False

保存图片

​ 画出的图形我们需要保存,可以先建立一个画布,设置我们图像的大小,然后将这个画布保存下来

#设置一个(12,6)的画布
plt.figure(figsize=(12, 6))

#图形绘制代码
sns.boxplot(data=data,palette=sns.color_palette('Blues'))

#将画布保存为'xiang.png',还可以保存为jpg、svg格式图片
plt.savefig('xiang.png')