seaborn调色板及颜色设置与单变量分析绘图

2,367 阅读7分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天,点击查看活动详情

seaborn调色板及颜色设置

  • 颜色在可视化中非常重要,用来代表各种特征,并且提高整个图的观赏性。
  • 调色板就像是装水彩笔的盒子, 等我们把图绘制完成以后,使用相应颜色的水彩笔涂上颜色就好了。

color_palette()调色板标题

seaborn的seaborn.color_palette() 函数提供了一组定义好的调色板,也 就是我上面所说的装水彩笔的盒子。

下面我们了解一下这个函数:

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

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

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

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

查看默认调色

color_palette()默 认给我们提供了6种 主题颜色去对应 matplotlib 中的10种 颜色。

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

 current_palette = sns.color_palette()
 sns.palplot(current_palette)

image.png

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

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

image.png

注意: 这六种主题形成的颜色列表中,最多含有10种,如果我们设置n_colors的值多余10 中,就会用这10种颜色进行循环增加。 运行下方代码,你会发现12个颜色中,前两个和最后两个是一样的:

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

image.png

如果我们想用不同的颜色表示不同的类 别,有没有更多的颜色可供我们使用呢?

最常用的方法是使用hls的颜色空间,这是RGB值 的一个简单转换。 sns.palplot(sns.color_palette("hls", 12)) hls:大家就可以看做是一个颜色足够丰富的色板。

体验调色板:

 import matplotlib.pyplot as plt
 %matplotlib inline
 import seaborn as sns
 ​
 a = ['a','b','c','d','e','f']
 b = [38,19,14,11,6,5.6]
 # plt.figure(figsize=(20,8),dpi=180)
 plt.xticks(fontsize=20)
 plt.yticks(fontsize=20)
 plt.bar(a,b,width=0.2,color = sns.color_palette("hls",6))
 for x,y in enumerate(b):
     plt.text(x,y+0.2,y,ha="center",fontsize=12)

image.png

我们看到使用调色板成功的设置了条形图的颜色,如果调色板 的颜色少于条形图的个数,将会循环调色板颜色。

单变量分析绘图

单变量其实就是我们通常接触 到的数据集中的一列数据。单变量分析是数据分析中最简单的形式,其中被分析的数据只包含一个变量。因为它是一个单一的变量,它不处理原因或关系。单变量分析的主要目的是描述数据并找出其中存在的模式, 也就是“用最简单的概括形式反映出大量数据资料所容纳的 基本信息”。

连续型数据一般应用在计算机领域, 在数据挖掘、数据分类时会遇到此 类数据,因其数据不是单独的整十 整百的数字,包含若干位小数且取值密集,故称为连续型数据,例如, 身高、体重、年龄等都是连续变量。

由记录不同类别个体的数目所得到的数据,称为离散型数据。例如,某一 类别动物的头数,具有某一特征的种子粒数,血液中不同的细胞数目等。 所有这些数据全部都是整数,而且不能再细分,也不能进一步提高他们的精确度

绘制

首先,使用NumPy模块从标准正态分布中随机地抽取 1000个数,作为我们的连续数值型数据

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

size=1000,表示随机产生1000个数,它们组成的数据是一组连续型的数值型数据。

在seaborn里最常用的观察单变量分布的函数是 distplot()

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

 import numpy as np
 data = np.random.normal(size=1000)
 sns.set(style='darkgrid')
 sns.distplot(data, kde = True)
 # 如果kde=False 时,不显示核密度线

image.png

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

在自己机器上运行出现的问题:

目前我的seaborn的版本号:sns.__version__:'0.12.0'

我使用老师的代码报的错:他说我的数据有问题,需要换成histograms,即histplot

文档地址:点击跳转

我在GitHub中看源代码的介绍,

Seaborn's distplot function was deprecated in v0.11.0, a release that included several new functions for plotting data distributions. Calling distplot on v0.11.0 or later issues a warning urging the user to update their code with one of two new functions: either displot (note, no t) or histplot.

然后我看到了介绍里面也有和我类似的错误:

image.png

文档分析了distplot,histplot,displot三者的区别,点击文档可以查看。

以我上面的data数据集来做例子:

 import numpy as np
 data = np.random.normal(size=1000)
 sns.set(style="darkgrid")
 sns.distplot(data,kde=True)

image.png

 import numpy as np
 data = np.random.normal(size=1000)
 sns.set(style="darkgrid")
 sns.histplot(data,kde=True,stat="density")

image.png

 import numpy as np
 data = np.random.normal(size=1000)
 sns.set(style="darkgrid")
 sns.displot(data,kde=True)

image.png

最后三个数据集可视化出来的图形不一样。

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

image.png

在上面的结果中,横轴表示数据点的取值,纵轴表示概率密度值。

  • 该结果中使用直方图描述了数据的分布:将数据分成若干个组,用柱形的高度记录每组中数据所占比率。
  • 这条曲线叫做 概率密度曲线。 就是采用平滑的峰值函数来拟合观察到的数据点,从而对真实的概率分布进行模拟。
  • 从上图中可以看出,在数字0周围,概率密度值是最大的,但是,随着向两侧的逐渐扩展,概率密度逐渐减小。这样的分布也是一个标准正态分布。

概率密度曲线的原理比较简单,在我们知道某 一事物的概率分布的情况下,如果某一个数在观察中出现了,我们可以认为这个数的概率密度很大,和这个数比较近的数的概率密度也会比较大,而那些离这个数远的数的概率密度会比较小。

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

 import numpy as np
 data = np.random.normal(size=1000)
 sns.set(style='darkgrid')
 sns.kdeplot(data,shade=False)

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

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

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

image.png

以上就是连续数值型单变量数据常见的可视化方法,我们常会使用到直方图、核密度图来描述数据的分布。

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