开启掘金成长之旅!这是我参与「掘金日新计划 · 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)
下面我们依次看看每种主题色的效果:
theme_list = ["deep","muted","pastel","bright","dark","colorblind"]
for i in theme_list:
sns.palplot(sns.color_palette(i))
注意: 这六种主题形成的颜色列表中,最多含有10种,如果我们设置n_colors的值多余10 中,就会用这10种颜色进行循环增加。 运行下方代码,你会发现12个颜色中,前两个和最后两个是一样的:
sns.palplot(sns.color_palette("deep",12))
如果我们想用不同的颜色表示不同的类 别,有没有更多的颜色可供我们使用呢?
最常用的方法是使用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)
我们看到使用调色板成功的设置了条形图的颜色,如果调色板 的颜色少于条形图的个数,将会循环调色板颜色。
单变量分析绘图
单变量其实就是我们通常接触 到的数据集中的一列数据。单变量分析是数据分析中最简单的形式,其中被分析的数据只包含一个变量。因为它是一个单一的变量,它不处理原因或关系。单变量分析的主要目的是描述数据并找出其中存在的模式, 也就是“用最简单的概括形式反映出大量数据资料所容纳的 基本信息”。
连续型数据一般应用在计算机领域, 在数据挖掘、数据分类时会遇到此 类数据,因其数据不是单独的整十 整百的数字,包含若干位小数且取值密集,故称为连续型数据,例如, 身高、体重、年龄等都是连续变量。
由记录不同类别个体的数目所得到的数据,称为离散型数据。例如,某一 类别动物的头数,具有某一特征的种子粒数,血液中不同的细胞数目等。 所有这些数据全部都是整数,而且不能再细分,也不能进一步提高他们的精确度
绘制
首先,使用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 时,不显示核密度线
data参数记录绘图所用的数据,而bins参数在绘制直方图时可以进 行设置,用于设置分组的个数,默认值时,会根据数据的情况自动 分为n个组,若是想指定分组的个数,可以设置该参数,然后计算 我们可以增加其数量,来看到更为详细的信息。
在自己机器上运行出现的问题:
目前我的seaborn的版本号:sns.__version__:'0.12.0'
我使用老师的代码报的错:他说我的数据有问题,需要换成histograms,即histplot
文档地址:点击跳转
我在GitHub中看源代码的介绍,
Seaborn's
distplotfunction was deprecated in v0.11.0, a release that included several new functions for plotting data distributions. Callingdistploton v0.11.0 or later issues a warning urging the user to update their code with one of two new functions: eitherdisplot(note, not) orhistplot.
然后我看到了介绍里面也有和我类似的错误:
文档分析了distplot,histplot,displot三者的区别,点击文档可以查看。
以我上面的data数据集来做例子:
import numpy as np
data = np.random.normal(size=1000)
sns.set(style="darkgrid")
sns.distplot(data,kde=True)
import numpy as np
data = np.random.normal(size=1000)
sns.set(style="darkgrid")
sns.histplot(data,kde=True,stat="density")
import numpy as np
data = np.random.normal(size=1000)
sns.set(style="darkgrid")
sns.displot(data,kde=True)
最后三个数据集可视化出来的图形不一样。
hist和kde参数用于调节是否显示直方图及核密度估计图,默认 hist(条形图)、kde(核密度线)均为True,表示两者都显示。我们可以通过修改参数为 False选择是否将其中之一去掉。
在上面的结果中,横轴表示数据点的取值,纵轴表示概率密度值。
- 该结果中使用直方图描述了数据的分布:将数据分成若干个组,用柱形的高度记录每组中数据所占比率。
- 这条曲线叫做 概率密度曲线。 就是采用平滑的峰值函数来拟合观察到的数据点,从而对真实的概率分布进行模拟。
- 从上图中可以看出,在数字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,表示不绘制阴影。
以上就是连续数值型单变量数据常见的可视化方法,我们常会使用到直方图、核密度图来描述数据的分布。
在Seaborn中集成了这两种图像,使用 sns.distplot()函数可以将它们绘制在同 一张图中。