【Seaborn】绘图工具的魅力

1️⃣seaborn简介

Seaborn在 Matplotlib 的基础上,进行了更高级的封装,使得作图更加方便快捷。可以通过极简的代码,做出具有分析价值而又十分美观的图形。

在这里插入图片描述
看到这些图片有没有被惊艳到

同样在使用Seaborn之前我们需要将其导入:

import seaborn as sns

首先,我们先了解一下seaborn.set()函数:

sns.set(context='notebook',style='darkgrid',palette='deep',font='sans-serif',font_scale=1,color_codes=True)

context=’’:
参数控制着默认的画幅大小,分别有{paper, notebook, talk, poster}四个值。其中,poster > talk > notebook > paper。

style=’’:
参数控制默认样式,分别有{darkgrid, whitegrid, dark, white, ticks} ,你可以自行更改查看它们之间的不同。

palette=’’:
参数为预设的调色板。分别有 {deep, muted, bright, pastel, dark, colorblind}等,你可以自行更改查看它们之间的不同。

font=’’ 用于设置字体。

font_scale=’’:设置字体大小。

color_codes=’’: 不使用调色板而采用先前的 ‘r’ 等色彩缩写。

然后,我们使用numpy的np.linspace()函数生成100个0到15的等间隔数列。

x = np.linspace(0, 15, 100)

比如:我们来画一个双曲线吧

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
def sinplot():
    x = np.linspace(0, 15, 100)
    for i in range(1, 3):
        plt.plot(x, np.sin(x + i))
        
sinplot()

✨效果
在这里插入图片描述

代码中,我们没有对风格做任何的设置。

接下来,我们调用sns.set()函数来改变style,看看效果如何:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
def sinplot():
	x = np.linspace(0, 15, 100)
	for i in range(1, 3):
		plt.plot(x, np.sin(x + i))
sns.set()
sinplot()
plt.show()

根据结果,我们添加了sns.set()方法后,图形添加了网格,而且隐藏了坐标轴。

2️⃣seaborn风格

seaborn提供了5种默认的风格,我们在实际绘图中只要选择一种喜欢的风格就可以了,下面我们就看看这5种风格的用法及效果。

sns.set(style='white')

在这里插入图片描述

sns.set(style='whitegrid')

在这里插入图片描述

sns.set(style='darkgrid')

在这里插入图片描述

sns.set(style='dark')

在这里插入图片描述

sns.set(style='ticks')

在这里插入图片描述

当然,除了这5中内置风格以外,我们也可以通过其他函数进行个性化设置。
比如,当我们的风格设置为style='ticks'时,会有上部和右侧的坐标轴,我们可以使用seaborn.despine()函数进行去除。

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
def sinplot():
	x = np.linspace(0, 15, 100)
	for i in range(1, 3):
		plt.plot(x, np.sin(x + i))
sns.set(style='ticks')
sinplot()
sns.despine()
plt.show()

✨效果
在这里插入图片描述
sns.despine()函数默认移除了上部和右侧的轴,当然我们也可以移除其他轴。

对于是否移除某个轴,我们可以设置sns.despine()函数的top、right、left、bottom参数的值来控制,值为True时,会移除该轴,反之,保留该轴。

在一个figure对象中,我们可以添加多个子图,那么如何让我们不同的子图使用不同的风格呢?
我们可以使用with设置风格,在with下画的图都可以使用该种风格。

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
def sinplot():
	x = np.linspace(0, 15, 100)
	for i in range(1, 3):
		plt.plot(x, np.sin(x + i))

# 设置子图风格
with sns.axes_style("darkgrid"):
    plt.subplot(311)
    sinplot()

plt.subplot(212)
sinplot()
plt.show()

✨效果
在这里插入图片描述
我们看到第一个子图的风格成功设置成了darkgrid,而且在绘制第二个子图的时候并未受到影响。

sns.axes_style()的作用是临时设置绘图的参数,也就是只设置使用with打开的作用域内的绘图,不会对其他的图造成影响。

🚩这就是常用seaborn库的风格设置,我们常会使用sns.set()设置图形风格,以及使用with sns.axes_style()函数给不同的子图设置不同的风格。

3️⃣seaborn调色板及颜色设置

颜色在可视化中非常重要,用来代表各种特征,并且提高整个图的观赏性。
color_palette()调色板

seaborn.color_palette(palette=None, n_colors=None, desat=None)

该函数的返回值: 是一个调色板定义的一个颜色列表。

palette:调色板,可以不写,可以填写字符串,也可以是一个序列。
n_colors:可以指定颜色的数量。
desat按照比例降低每一种颜色的饱和度。

不带任何参数时,表示获取这个盒子里的全部水彩笔。

import seaborn as sns
# 获取默认调色板的颜色列表
current_palette = sns.color_palette()
# 绘制调色板的颜色
sns.palplot(current_palette)

✨效果
在这里插入图片描述
color_palette()默认给我们提供了6种主题颜色去对应matplotlib中的10种颜色。

6个默认的颜色主题分别是: deep,muted,pastel,bright,dark,colorblind。

下面我们依次看看每种主题色的效果:

import seaborn as sns
# 获取默认调色板的颜色列表
current_palette = sns.color_palette()
# 绘制调色板的颜色
sns.palplot(current_palette)


theme_list=['deep', 'muted', 'pastel','bright', 'dark', 'colorblind']
for i in theme_list:
    sns.palplot(sns.color_palette(i))

✨效果

在这里插入图片描述
🚩注意: 这六种主题形成的颜色列表中,最多含有10种,如果我们设置n_colors的值多余10中,就会用这10种颜色进行循环增加。

如果我们想用不同的颜色表示不同的类别,有没有更多的颜色可供我们使用呢?
最常用的方法是使用hls的颜色空间,这是RGB值的一个简单转换。

sns.palplot(sns.color_palette("hls", 12))

hls:大家就可以看做是一个颜色足够丰富的色板。
运行下面代码,体验调色板:

%matplotlib inline
from matplotlib import pyplot as plt
import seaborn as sns
a = ['a','b','c','d','e','f']
b =[38.13,19.85,14.89,11.36,6.47,5.93]
plt.figure(figsize=(20,8),dpi=80)

# 绘制条形图
plt.bar(a,b,width=0.3,color=sns.color_palette("hls", 16))
plt.show()

✨效果
在这里插入图片描述

4️⃣seaborn绘图方式

只有了解了seaborn的绘图方式,才能感受到它的魅力。

1.单变量分析绘图

单变量其实就是我们通常接触到的数据集中的一列数据。

单变量分析是数据分析中最简单的形式,其中被分析的数据只包含一个变量。因为它是一个单一的变量,它不处理原因或关系

单变量分析的主要目的是描述数据并找出其中存在的模式,也就是“用最简单的概括形式反映出大量数据资料所容纳的基本信息”。

往后,我们就要研究的是连续数值型数据的分布,那么什么样的数据是连续数值型数据呢?什么样的数据是离散型数据呢?(由记录不同类别个体的数目所得到的数据,称为离散型数据)

了解如何用seaborn绘制单变量分布?首先,使用NumPy模块从标准正态分布中随机地抽取1000个数,作为我们的连续数值型数据。

data = np.random.normal(size=1000) 

random是NumPy的一个随机模块,在random模块中的normal方法表示从正态分布中随机产生size个数值。

import numpy as np
# 从正态分布中随机地抽取数据
data = np.random.normal(size=1000) 
# 查看数据的表现形式
print(data)

✨效果
在这里插入图片描述
size=1000,表示随机产生1000个数,它们组成的数据是一组连续型的数值型数据。

在seaborn里最常用的观察单变量分布的函数是distplot(),默认地,这个函数会绘制一个直方图,并拟合一个核密度估计。

sns.distplot(data, bins, hist = True, kde = True)

data参数:记录绘图所用的数据

bins参数:在绘制直方图时可以进行设置,用于设置分组的个数,默认值时,会根据数据的情况自动分为n个组,若是想指定分组的个数,可以设置该参数,然后计算我们可以增加其数量,来看到更为详细的信息。

hist和kde参数:用于调节是否显示直方图及核密度估计图,默认hist、kde均为True,表示两者都显示。我们可以通过修改参数为False选择是否将其中之一去掉。

用seaborn的distplot()绘制出数据的分布的直方图,观察概率密度曲线情况:

%matplotlib inline
import numpy as np
import seaborn as sns
# 从标准正态分布中随机地抽取1000个数
data = np.random.normal(size=1000) 
sns.set(style='darkgrid')
sns.distplot(data,kde=True)

✨效果
在这里插入图片描述
在上面的结果中,横轴表示数据点的取值,纵轴表示概率密度值。

如果我们只想要显示概率密度曲线,不想显示柱状图,我们也可以使用sns.kdeplot()函数绘制数据的概率密度曲线图。

sns.kdeplot()函数的使用方法如下:

sns.kdeplot(data1, data2, shade = False)

shade参数用于设置图像下方的部分是否设置阴影,默认值为False,表示不绘制阴影。

%matplotlib inline
import numpy as np
import seaborn as sns
data = np.random.normal(size=1000) 
sns.set(style='darkgrid')
sns.kdeplot(data, shade = True)

绘制概率密度曲线图:

✨效果
在这里插入图片描述

在Seaborn中集成了这两种图像,使用sns.distplot()函数可以将它们绘制在同一张图中。

2.绘制双变量联合分布图

有时我们不仅需要查看单个变量的分布,同时也需要查看变量之间的联系,往往还需要进行预测等。这时就需要用到双变量联合分布了。

seaborn.jointplot(x, y, data=None, kind='scatter')

x、y:分别记录x轴和y轴的数据名称。

data:数据集,data的数据类型为DataFrame。

kind:用于设置图像的类型,可选的类型有:‘scatter’ | ‘reg’ | ‘resid’ | ‘kde’ | ‘hex’,分别表示散点图、回归图、残差图、核密度图和蜂巢图。

参数x_jitter:这个参数可以设置size值的偏离范围,这里size代表用餐人数,那么我们设置的x_jitter应该在0-1之间,我们设置为0.3,散点图显得更易观

现在我们同样使用np.random.normal()函数创建一个含有两列数据的DataFrame,然后根据该数据绘制双变量散点图。

import seaborn as sns
import numpy as np
import pandas as pd

# 创建dataframe: df
df = pd.DataFrame({'x': np.random.normal(size=500),
                   'y': np.random.normal(size=500)})
print(df)

✨效果
在这里插入图片描述
我们现在尝试使用seaborn.jointplot()函数绘制双变量散点图:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 创建dataframe: df
df = pd.DataFrame({'x': np.random.normal(size=500),
                   'y': np.random.normal(size=500)})
# 绘制双变量散点图
sns.jointplot(x='x', y='y', data=df,kind='reg')
plt.show()

✨效果
在这里插入图片描述
🚩大家可以分别尝试不同的kind,得到的效果也不一样

根据结果我们发现,sns.jointplot()函数可以显示两个变量之间的联合关系以及每个单变量的分布。

我们把函数中的kind参数设置为’reg’就可以做一些简单的线性模型拟合。

上面我们根据数据绘制了联合散点图,但是你会发现两个数据并没有明确的线性关系,并且散点图有一个问题,就是相同的点会覆盖在一起,导致我们看不出来浓密和稀疏。

蜂巢图的绘制还是使用seaborn.jointplot()函数,只是将kind参数更该为hex即可

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
df = pd.DataFrame({'x': np.random.randn(500),
                   'y': np.random.randn(500)})
sns.jointplot(x='x', y='y', data=df, kind='hex')
plt.show()

蜂巢图中每个六边形表示一个范围,用颜色表示这个范围内的数据量,颜色越白的地方数据量越小,颜色越深的地方表示数据量越大。

🚩所以,在不同的情况下,我们应该选择合适的kind去进行数据分析

3.多变量关系分布图

我们在做数据分析时面对的数据集中往往有很多列数据,在我们还没有确定针对哪两个变量进行挖掘的时候,比较稳妥的做法就是将数据中的每两列都考虑一次,做一个完整的变量关系可视化。

我们使用seaborn中的pairplot()方法,就可以绘制连续数值型多变量关系分布图。

sns.pairplot( data, hue, vars, kind, diag_kind)

参数介绍:
data:表示绘图所用到的数据集
hue参数:表示按照某个字段进行分类
vars参数:可以用于筛选绘制图像的变量,用列表的形式传入列名称
kind参数:用于设置变量间图像的类型,可以选择’scatter’散点图,或者 'reg’回归图
diag_kind参数:用于设置对角线上的图像类型,可以选择’hist’直方图, 或者’kde’核密度图

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
data = pd.read_csv('数据路径')
sns.pairplot(data)
plt.show()

因为数据太过庞大,所以这里没法展示完整代码了,如果需要数据去实现这个代码,大家可以加群:785318982,这里可以领取学习资料和所需的资料包


✨效果

在这里插入图片描述
从图中可以看出,在petal_length和petal_width散点图中,呈现了比较明显的线性关系。

我们将hue参数设置为species。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
data = pd.read_csv('数据路径')
sns.pairplot(data,hue='species')
plt.show()

在这里插入图片描述
从图中可以看出,不同的颜色代表着花的不同种类,同一种的数据聚集在一起,并且与其他类别的数据交集比较少,表示三种花有明显的差别。

我们也可以使用pairplot函数绘制两个变量的关系分布图。

使用kind参数设置两个变量间使用回归图,使用diag_kind参数设置对角线上的图像类型为密度图。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

data = pd.read_csv('数据路径')
# 双变量图像设置为回归图,单变量(对角线图)设置为核密度图
sns.pairplot(data, hue='species',vars=['sepal_length', 'sepal_width'],kind='reg', diag_kind='kde')
plt.show()

✨效果
在这里插入图片描述
大家可以根据自己对于数据的理解,设置不同的图像样式,来继续发掘数据中的信息。

  • 6
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弈鸣coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值