seaborn库学习笔记

!pip install  seaborn

seaborn

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

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

规范化引入

import seaborn as sns
import matplotlib.pyplot as plt

这里我们导入 Seaborn 和 Matplotlib.pyplot 模块,分别命名为 sns 和 plt,原则上这个简称是可以随意写的,但为了规范,尽量写成这样。这里引入 Matplotlib.pyplot ,是为了通过 Matplotlib 的参数去进行更好的控制。

%matplotlib inline

是为了在 Jupyter 中正常显示图形,若没有这行代码,图形显示不出来的。

导入数据

titanic=sns.load_dataset('titanic')

用 Seaborn 的 load_dataset() 方法

输出图形

sns.barplot(x='class',y='survived',data=titanic)

这是图形输出的直接代码,barplot 表示输出条形图,同样的还有 Seaborn 中还有 countplot、boxplot、violinplot、regplot、lmplot、heatmap 等多种图形方法可以使用

01 distplot 直方图

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

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

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

distplot() 默认拟合出了密度曲线

但在绘图之前,我们观测到'age'字段中存在缺失值,需要先用 dropna() 方法删掉存在缺失值的数据,否则无法绘制出图形

#去除'age'中的缺失值,distplot不能处理缺失数据
age1=titanic['age'].dropna()

sns.distplot(age1)

'kde' 控制密度估计曲线的参数,默认为 True,不设置会默认显示,如果我们将其设为 False,则不显示密度曲线。

'bins'控制分布矩形数量的参数,通常我们可以增加其数量,来看到更为丰富的信息。

'reg' 参数用于控制直方图中的边际毛毯,通过控制'reg'是实现毛毯是否显示。

#创建一个一行2列的画布,主要方便对比
fig,axes=plt.subplots(1,2)

#设置'reg'参数,加上观测数值的边际毛毯
#需要用axes[]表示是第几张图,从0开始
sns.distplot(age1,ax=axes[0]) #左图
sns.distplot(age1,rug=True,ax=axes[1]) #右图

当然,除了控制矩形分布、密度曲线及边际毛毯是否显示,还可以通过更丰富的参数控制他们展示的细节,这些通过参数 'hist_kws' 、'kde_kws' 、'reg_kws' 来进行设置,因为其中涉及到多个参数,参数间用逗号隔开,参数外面用大括号括住

#可以分别控制直方图、密度图的关键参数
fig,axes=plt.subplots(1,2) 
sns.distplot(age1,rug=True,ax=axes[0])
sns.distplot(age1,rug=True,
                     hist_kws={'color':'green','label':'hist'},
                     kde_kws={'color':'red','label':'KDE'},
                     ax=axes[1])

 02 barplot条形图

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

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

设置'hue'参数,对x轴的数据进行细分,细分的条件就是'hue'的参数值,比如这里我们的x轴是'class'(仓位等级),我们将其按'sex'(性别)再进行细分

sns.barplot(x='class',y='survived',hue='sex',data=titanic)
sns.barplot(x='embarked',y='survived',
                    hue='class',data=titanic)

03 countplot计数图

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

同样,我们以数据集'titanic'为例子,首先探索'deck'字段下的类别计数。

如果我们希望调换横纵坐标,也就是类别放于纵坐标,计数值横坐标显示,将x轴换为y轴即可

sns.countplot(y='deck',hue='who',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)

这里我们可以通过设置'jitter'参数控制抖动的大小。

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


swarmplot() 方法使用防止它们重叠的算法沿着分类轴调整点。它可以更好地表示观测的分布,它适用于相对较小的数据集

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

可以通过'hue'参数,对散点图添加更多细分的维度,Seaborn 中会以颜色来进行区分

sns.stripplot(x='embarked',y='age',hue='who',jitter=1,data=titanic)

05 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'(年龄)情况。

当hue参数只有两个级别时,也可以通过设置'split'参数为True,“拆分”小提琴,提琴两边分别表示两个分类的情况,这样可以更有效地利用空间。

sns.violinplot(x='class',y='age',hue='alive',
                    data=titanic,split=True,inner='stick')

07 regplot/lmplot

回归图

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

这里我们使用 Seaborn 自带的数据集'iris'来绘制回归相关的图形。首先我们导入收据来看看数据集的大概情况:

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

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

#随机查看数据集的10行数据
iris.sample(10)

图中的点表示实际的数据点,Seaborn 根据这些数据拟合出直线,表示x轴和y轴对应字段之间的线性关系,直线周围的阴影表示置信区间。

关于置信区间,可以通过设置'ci'参数控制是否显示。

sns.regplot(x='sepal_length',y='petal_length',data=iris,ci=None)

可以通过'color'和'marker'参数来控制图形的颜色以及数据点的形状。 

fig,axes=plt.subplots(1,2) 

sns.regplot(x='sepal_length',y='petal_length',data=iris,
            color='r',marker='+',ax=axes[0])

sns.regplot(x='sepal_length',y='petal_length',data=iris,
            color='g',marker='*',ax=axes[1])

lmplot() 可以设置hue,进行多个类别的显示,而 regplot() 是不支持的。这里我们通过设置hue='species',来进行分类别地展示。 

sns.lmplot(x='sepal_length',y='petal_length',
                 hue='species',data=iris)

同样的,我们也可以更改数据点的形状,来进行区分

sns.lmplot(x='sepal_length',y='petal_length',hue='species',
                    data=iris,markers=['*','o','+'])

设置'fit_reg'参数,可以控制是否显示拟合的直线

分开绘制,用'col'参数代替'hue'

sns.lmplot(x='sepal_length',y='petal_length',
                col='species',data=iris)

08 heatmap

热力图

热力图通常用来表示特征之间的相关性,一般通过颜色的深浅来表示数值的大小或者相关性的高低。

这里我们导入 Seaborn 自带的另一个数据集'flights',来绘制热力图。先查看数据前10行的情况:

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
flights = sns.load_dataset("flights")
flights.head(10)

我们以'year'为纵轴,'month'为横轴,'passengers'的值为标准绘制热力图 

f=flights.pivot('year','month','passengers')
sns.heatmap(f)

如果要显示具体的数值,可以通过'annot'参数来控制 

sns.heatmap(f, annot=True,fmt="d")

cmap = sns.diverging_palette(200,20,sep=20,as_cmap=True)
sns.heatmap(f,cmap=cmap)

图形背景

Seaborn 中有 white / whitegrid / dark / darkgrid / ticks 几种样式,用 set_style() 函数控制,分别如下:

whitegrid 白色网格背景

white 白色背景(默认)

darkgrid 黑色网格背景

dark 黑色背景

ticks 四周带有刻度的白色背景

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

#创建一个20行6列的数据
data = np.random.normal(size=(20, 6)) + np.arange(6) / 2

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'))
# 设置颜色模式为'pastel'
sns.boxplot(data=data,palette=sns.color_palette('pastel'))

需要注意的是,除了默认的颜色模式有10中颜色外,其他的颜色模式只有6种颜色,如果需要更多颜色,那么则需要采用hls色彩空间。

#创建一个20行10列的数据'data2'
data2 = np.random.normal(size=(20, 10)) + np.arange(10) / 2  

#利用hls色彩空间进行调色
sns.boxplot(data=data2, palette=sns.color_palette('hls', 10)) 

我们也可以通过简单的设置,得到单色渐变的效果,默认颜色由浅到深。

#可以尝试 Reds/Greens,默认颜色由浅到深
sns.boxplot(data=data,palette=sns.color_palette('Blues'))

显示中文

# 指定默认字体
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')

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值