(十五)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对有明显区别的颜色对.通过颜色对来表达颜色的分布.比如每队较深的一个颜色表示一个国家.每队的两个深浅颜色分别表示同一国家的两个运动员.

到底使用什么颜色的画笔,还得看大家实际需求,如果能够把数据描绘得更加清晰,漂亮,那就使用什么样的颜色.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271