(十五)Seaborn知识学习2-python数据分析与机器学习
文章原创,最近更新:2018-05-10
1.Seaborn调色板的介绍
2.调色板相关的函数
3.分类色板
4.圆形画板
课程来源: python数据分析与机器学习实战-唐宇迪
学习参考链接:
1、Seaborn(sns)官方文档学习笔记(第二章 斑驳陆离的调色板)
2、Seaborn官方0.8.1版本
1.Seaborn调色板的介绍
在画图当中有个非常重要的模块就是颜色,在数据图表的绘制当中起着举足轻重的作用.一个图画的好不好看,很大程度上是由颜色的取色漂不漂亮决定的.这个颜色分成两种,一种是离散型的,一种是连续型的.
离散型的比如统计4个运动员,跑步的分布情况.四个运动员可以用不同的颜色进行区分,这就是离散型.就是多个种类用折线图进行统计,这也是离散型.
连续型的比如统计一个运动员一天的情况,一天当中,有些情况是比较重要的,有些情况是不重要的,在数据当中,可以用一条线画出一条渐变色.渐变色可以用一条数据由重要到不重要或由不重要到重要的一个变化程度.
2.调色板相关的函数:
1)color_palette()能传入任何Matplotlib所支持的颜色
最重要的直接设置调色板的函数,不写参数则默认颜色
- color_palette()返回定义调色板的颜色列表
seaborn.color_palette(palette=None, n_colors=None, desat=None)-
可用的seaborn调色板名称:deep(默认颜色), muted, pastel, bright, dark, 和 colorblind
-
其他选项:hls,husl,任何命名的matplotlib调色板,颜色列表
-
调用此函数palette=None将返回当前matplotlib颜色循环。
-
相关参数
- palette:调色板名称或None(无返回当前调色板)。
- n_colors:int,可选,调色板中的颜色数量
- desat:浮点型,可选,按比例去饱和每种颜色
-
返回的值:palette(调色板):RGB元组列表
-
2)palplot()
模块seaborn.miscplot中的函数palplot, 将调色板中的值绘制为水平数组,palplot(pal,size = 1)
- pal:matplotlib颜色的序列.颜色,即由seaborn.color_palette()返回的颜色
- size:绘制水平数组的大小
3)set_palette()设置所有图的颜色
set_palette(palette, n_colors=None, desat=None, color_codes=False)设置所有图的默认颜色循环。
-
palette:hls | husl | matplotlib色彩表| seaborn调色板.
调色板定义。应该是color_palette() 可以处理的东西。 -
n_colors:int,循环中的颜色数量。默认颜色数量取决于格式palette
-
desat:浮点型,按比例对每种颜色去饱和。
-
color_codes:布尔,如果True并且palette是一个seaborn调色板,请将简写颜色代码(例如“b”,“g”,“r”等)重新映射到此调色板的颜色。
对应的函数set_palette()接受相同的参数,并为所有图设置默认的颜色循环。你也可以在with块中使用color_palette()来实现临时的更改调色板配置。
3.分类色板
分类色板(定性)是在区分没有固定顺序的数据时最好的选择。
Seaborn对颜色提供了非常多的选择方式,默认的颜色循环被更改为一组六种颜色。虽然这些颜色可能会让你想起matplotlib的标准颜色循环,但他们无疑更赏心悦目一些。
默认颜色主题共有六种不同的变化分别是:deep, muted, pastel, bright, dark, 和 colorblind。
类似下面的方式直接传入即可。
current_palette = sns.color_palette("dark") # 直接传入对应的参数即可变化
sns.palplot(current_palette)
六种不同的主题变化,是如何的呢?
- deep,默认颜色,完整的代码如下:
import seaborn as sns
current_palette=sns.color_palette()
#等价current_palette=sns.color_palette("deep")
sns.palplot(current_palette)
输出的结果如下:
比如上节课画的箱线图,在没有设置颜色的情况下,绘制的图形就是默认的颜色.
- muted,完整的代码如下:
import seaborn as sns
current_palette=sns.color_palette("muted")
sns.palplot(current_palette)
输出的结果如下:
- pastel,完整的代码如下:
import seaborn as sns
current_palette=sns.color_palette("pastel")
sns.palplot(current_palette)
输出的结果如下:
- bright,完整的代码如下:
import seaborn as sns
current_palette=sns.color_palette("bright")
sns.palplot(current_palette)
输出的结果如下:
- dark,完整的代码如下:
import seaborn as sns
current_palette=sns.color_palette("dark")
sns.palplot(current_palette)
输出的结果如下:
- colorblind,完整的代码如下:
import seaborn as sns
current_palette=sns.color_palette("colorblind")
sns.palplot(current_palette)
输出的结果如下:
4.圆形画板
当你有六个以上的分类要区分时,最简单的方法就是在一个圆形的颜色空间中画出均匀间隔的颜色(这样的色调会保持亮度和饱和度不变)。这是大多数的当他们需要使用比当前默认颜色循环中设置的颜色更多时的默认方案。
比如:系统默认了6个颜色的主题,比如我要画8个运动员的运动情况,是不是应该有8个颜色呢?那么颜色多于6个的时候,就需要用到画板了。
颜色涉及到两个指标,一个是饱和度一个是亮度。一般都是使用默认的饱和度和亮点,很少情况需要定义饱和度和亮度。
4.1使用hls的颜色空间
设置更多的颜色最常用的方法是使用hls的颜色空间,这是RGB值的一个简单转换。
比如hls的颜色空间,平均分为12等分,使用代码如下:
import seaborn as sns
sns.palplot(sns.color_palette("hls",12))
输出的结果如下:
比如hls的颜色空间,平均分为8等分,使用代码如下:
import seaborn as sns
sns.palplot(sns.color_palette("hls",8))
输出的结果如下:
这里的数量是根据种类而决定的,假设有8个运动员就写8,12个运动员就写12.这种方法比自己自定义颜色容易了很多.如果使用颜色的时候,没有特殊的需求,就按此方法进行.
我们把颜色写出来了,那应该怎么用呢?怎么把这定义好的颜色放到数据中呢?
根据以上调配的颜色,依据sns.boxplot中的参数palette,将颜色传进来,对以下的箱线图的图进行调色,具体代码如下:
import seaborn as sns
import numpy as np
data=np.random.normal(size=(20,8))+np.arange(8)/2
sns.boxplot(data=data,palette=sns.color_palette("hls", 8))
输出的结果如下:
根据输出的结果发现,绘制的图形与调配的8个颜色是一一对应的.
总结:
- 先制定好color_palette.
- 根据实际的种类,选好传进来多少种颜色,这样就会按照顺序,将不同类别的将指定好的颜色一一传进来.
- 这是分类画板最基本的使用方法.
这里涉及到的知识点:
1)boxplot(),相关参数如下:
boxplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, orient=None, color=None, palette=None, saturation=0.75, width=0.8, dodge=True, fliersize=5, linewidth=None, whis=1.5, notch=False, ax=None, **kwargs)
- 从以上参数可以看出,有个参数palette.
- palette参数的可选项是调色板名称,列表或字典.
- 而sns.color_palette()函数设置或查看调色板(palette),函数返回值是rgb元组的列表。
- 因此boxplot中的palette可调用palette参数.
4.2控制颜色的亮度和饱和
控制颜色的亮度和饱和,需要用到hls_palette()函数,相关参数如下:
- l-亮度 lightness
- s-饱和 saturation
画图的时候,可以指定不同颜色的亮度和饱和度,可以给颜色带了差异.
比如设置hls_palette()中的参数l=.3,s=.8,具体代码如下:
import seaborn as sns
sns.palplot(sns.hls_palette(8,l=.3,s=.8))
输出的结果如下:
比如设置hls_palette()中的参数l=.7,s=.9,具体代码如下:
import seaborn as sns
sns.palplot(sns.hls_palette(8,l=.7,s=.9))
输出的结果如下:
从以上结果都可以看出,饱和度和亮度会影响颜色,可以根据自己实际需要进行设置.
这里涉及的知识点:
1)hls_palette()
- hls_palette(n_colors = 6,h = 0.01,l = 0.6,s = 0.65)在HLS色调空间中获得一组均匀间隔的颜色。
- h,l和s应该在0和1之间
- n_colors:int,调色板中的颜色数量
- h(first hue) : float,第一色调
- l(lightness) : float,亮度
- s (saturation): float,饱和
- 返回: 调色板;seaborn调色板,作为RGB元组的颜色列表式对象。
4.3绘图颜色的配对
想进行绘图数据的对比,比如一批数据,是由3个国家组成的,每个国家分别有2个运动员,想呈现这样的趋势,国家与国家的颜色要有明显的区别,但是同一国家的两个运动员颜色最好相近.这样能够把数据更加清晰的表达出来.
这里需要用到"Paired",这个调出的调色板是有明显区别的颜色对.
代码如下:
import seaborn as sns
sns.palplot(sns.color_palette("Paired",8))
输出的结果如下:
共调出4对有明显区别的颜色对.通过颜色对来表达颜色的分布.比如每队较深的一个颜色表示一个国家.每队的两个深浅颜色分别表示同一国家的两个运动员.
到底使用什么颜色的画笔,还得看大家实际需求,如果能够把数据描绘得更加清晰,漂亮,那就使用什么样的颜色.