seaborn教程2——颜色调控
原文转载 https://segmentfault.com/a/1190000014966210
Seaborn学习大纲
seaborn
的学习内容主要包含以下几个部分:
风格管理
- 绘图风格设置
颜色风格设置
绘图方法
- 数据集的分布可视化
- 分类数据可视化
- 线性关系可视化
结构网格
- 数据识别网格绘图
本次将主要介绍颜色调控
的使用。
颜色风格设置
在Seaborn的使用中,是可以针对数据类型而选择合适的颜色,并且使用选择的颜色进行可视化,节省了大量的可视化的颜色调整工作。还是一样,在介绍如何使用颜色外观设置之前,我们引入所需要的模块。
%matplotlib inline
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(rc={"figure.figsize": (6, 6)})# 表示图标长宽尺寸,大小为英尺(inch)
np.random.seed(sum(map(ord, "palettes")))
建立调色板
对于不连续的外观颜色设置而言,最重要的函数恐怕要属color_palette了。这个函数拥有许多方法,让你可以随心所欲的可以生成各种颜色。并且,它可以被任何有palette参数的函数在内部进行使用(palette的中文意思是 "调色板")。 关于这个函数有几个点需要知道一下:
**(1)color_palette函数可以接受任何seaborn或者matplotlib颜色表中颜色名称(除了jet),也可以接受任何有效的matplotlib形式的颜色列表(比如RGB元组,hex颜色代码,或者HTML颜色名称)。
**(2)这个函数的返回值总是一个由RGB元组组成的列表,无参数调用color_palette函数则会返回当前默认的色环的列表。
sns.color_palette()
[(0.2980392156862745, 0.4470588235294118, 0.6901960784313725),
(0.8666666666666667, 0.5176470588235295, 0.3215686274509804),
(0.3333333333333333, 0.6588235294117647, 0.40784313725490196),
(0.7686274509803922, 0.3058823529411765, 0.3215686274509804),
(0.5058823529411764, 0.4470588235294118, 0.7019607843137254),
(0.5764705882352941, 0.47058823529411764, 0.3764705882352941),
(0.8549019607843137, 0.5450980392156862, 0.7647058823529411),
(0.5490196078431373, 0.5490196078431373, 0.5490196078431373),
(0.8, 0.7254901960784313, 0.4549019607843137),
(0.39215686274509803, 0.7098039215686275, 0.803921568627451)]
**(3)还有一个相应的函数,是set_palette,它接受与color_palette一样的参数,并会对所有的绘图的默认色环进行设置。当然,你也可以在with语句中使用color_palette来临时的改变默认颜色。
有三种通用的color palette可以使用,它们分别是:qualitative,sequential,diverging。
分类色板(quanlitative)
Qualitative调色板,也可以说成是类型调色板,因为它对于分类数据的显示很有帮助。当你想要区别不连续的且内在没有顺序关系的 数据时,这个方式是最好的。 当导入seaborn时,默认的色环就被改变成一组包含10种颜色的调色板,它使用了标准的matplolib色环,为了让绘图变得更好看一些。
current_palette = sns.color_palette()
sns.palplot(current_palette)
有6种不同的默认主题,它们分别是:deep,muted,pastel,birght,dark,colorblind。
themes = ['deep', 'muted', 'pastel', 'bright', 'dark', 'colorblind']
for theme in themes:
current_palette = sns.color_palette(theme)
sns.palplot(current_palette)
使用色圈系统
默认的6种主题看上去真不错,但是如果我们想要超过6种颜色呢? 当你有超过6种类型的数据要区分时,最简单的方法就是 在一个色圈空间内使用均匀分布的颜色。这也是当需要使用更多颜色时大多数seaborn函数的默认方式。 最常用的方法就是使用 hls 色空间,它是一种简单的RGB值的转换。
sns.palplot(sns.color_palette("hls", 8))
除此之外,还有一个 hls_palette 函数,它可以让你控制 hls 颜色的亮度和饱和度。
sns.palplot(sns.hls_palette(8, l=.3, s=.8))
然而,由于人类视觉系统工作的原因,根据RGB颜色产生的平均视觉强度的颜色,从视觉上看起来并不是相同的强度。如果你观察仔细,就会察觉到,黄色和绿色会更亮一些,而蓝色则相对暗一些。因此,如果你想用hls系统达到一致性的效果,就会出现上面的问题。
为了修补这个问题,seaborn给hls系统提供了一个接口,可以让操作者简单容易的选择均匀分布,且亮度和饱和度看上去明显一致的色调。
sns.palplot(sns.color_palette("husl", 8))
同样与之对应的,也有个husl_palette函数提供更灵活的操作。
使用分类Color Brewer调色板
另外一种对分类数据比较友好的调色板来自Color Brewer工具。在matplotlib中也存在这些颜色表,但是它们并没有被合适的处理。在seaborn中,当你想要分类的 Color Brewer 调色板的时候,你总是可以得到不连续颜色,但是这也意味着在某一点上,这些颜色将会开始循环。
Color Brewer 网站中的一个很好的特点就是它提供了一个色盲安全指导。色盲颜色有很多种http://en.wikipedia.org/wiki/Color_blindness,但是最常见的当属辨别绿色和红色。如果可以避免使用红色和绿色来对绘图元素上色,那么对于一些色盲人群将会是一个很好的消息。
下面两组颜色就是使用红色和绿色组合,这可能并不是最好的选择。
sns.palplot(sns.color_palette("Paired"))
sns.palplot(sns.color_palette("Set2", 10))
为了避免这些组合,我们需要从Color Brewer库中进行选择调色,有一个专门的 choose_colorbrewer_palette 函数可以实现这个功能。这个函数需要在 IPython notebook 中使用,因为 notebook 是一个交互式的工具,可以让你浏览各种选择并且调节参数。
sns_type = ["qualitative", "sequential", "diverging"]
for elem in sns_type:
sns.choose_colorbrewer_palette(elem)
#n:调节颜色的个数;
#desat:调节明暗和饱和度;
当然,您可能只想使用一组您特别喜欢的颜色。因为color_palette()接受一个颜色列表,这很容易做到。
flatui = ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71"]
sns.palplot(sns.color_palette(flatui))
使用xkcd颜色来命名颜色
在众多的努力帮助下,xkcd 完成了随机的 RGB 颜色的命名。一共生成了954个颜色http://xkcd.com/color/rgb/,并可可以随时通过xkcd_rgb字典调用。
plt.plot([0, 1], [0, 1], sns.xkcd_rgb["pale red"], lw=3)
plt.plot([0, 1], [0, 2], sns.xkcd_rgb["medium green"], lw=3)
plt.plot([0, 1], [0, 3], sns.xkcd_rgb["denim blue"], lw=3);
如果想要从 xkcd_rgb 字典中单独的抽取出一些颜色,你也可以将一组选择好的颜色放到 xkcd_palette 函数中。
colors = ["windows blue", "amber", "greyish", "faded green", "dusty purple"]
sns.palplot(sns.xkcd_palette(colors))
连续色板(sequential)
调色板的第二大类被成为 "顺序",这种调色板对于有从低(无意义)到高(有意义)范围过度的数据非常适合。尽管有些时候你可能想要在连续色板中使用不连续颜色,但是更通用的情况下是连续色板会作为颜色表在 kdeplot() 或者 corrplot() 或是一些 matplotlib 的函数中使用。
对于连续的数据,最好是使用那些在色调上有相对细微变化的调色板,同时在亮度和饱和度上有很大的变化。这种方法将自然地将数据中相对重要的部分成为关注点。
Color Brewer 的字典中就有一组很好的调色板。它们是以在调色板中的主导颜色(或颜色)命名的。
sns.palplot(sns.color_palette("Blues"))
就像在matplotlib中一样,如果您想要翻转渐变,您可以在面板名称中添加一个_r后缀。
sns.palplot(sns.color_palette("BuGn_r"))
seaborn还增加了一个允许创建没有动态范围的"dark"面板。如果你想按顺序画线或点,这可能是有用的,因为颜色鲜艳的线可能很难区分。
sns.palplot(sns.color_palette("dark"))
类似的,这种暗处理的颜色,需要在面板名称中添加一个_d后缀。
sns.palplot(sns.color_palette("GnBu_d"))
注意,你可能想使用 choose_colorbrewer_palette() 函数取绘制各种不同的选项。如果你想返回一个变量当做颜色映射传入seaborn或matplotlib的函数中,可以设置 as_cmap 参数为True。
“cubehelix”连续调色板
cubehelix调色板系统在亮度和色变变化上具有线性上升或下降的特点。这意味着,当颜色表中的信息被转化为黑色和白色或者被一个色盲者看到的时候,它将会被保存下来。
matplotlib 有内建的默认cubehelix 版本:
sns.palplot(sns.color_palette("cubehelix", 8))
seaborn为cubehelix系统添加一个接口使得其可以在各种变化中都保持良好的亮度线性梯度。
通过seaborn的cubehelix_palette()函数返回的调色板与matplotlib默认值稍有所不同,它不会在色轮周围旋转或覆盖更广的强度范围。seaborn还改变了排序使得更重要的值显得更暗:
sns.palplot(sns.cubehelix_palette(8))
其他cubehelix_palette()的参数主要调整色板的视觉。两个重要的选择是:start(值的范围为03)和rot,或者旋转的次数(-1和1之间)
sns.palplot(sns.cubehelix_palette(8, start=.5, rot=-.75))
你也可以控制断点的亮度和甚至对调结果顺序:
sns.palplot(sns.cubehelix_palette(8, start=2, rot=0, dark=0, light=.95, reverse=True))
默认情况下你只会得到一些像seaborn其它调色板一样的颜色列表,但你也可以通过使用as_cmap=True让调色板返回一个可以被传入seaborn或matplotlib函数的颜色映射对象。
x, y = np.random.multivariate_normal([0, 0], [[1, -.5], [-.5, 1]], size=300).T
cmap = sns.cubehelix_palette(light=1, as_cmap=True)
sns.kdeplot(x, y, cmap=cmap, shade=True);
与前面一样,也可以在notebook中使用choose_cubehelix_palette()来调节参数帮助选择更适合的调色板或颜色映射。如果想让函数返回一个类似hexbin的颜色映射而非一个列表则需要传入as_cmap=True。
定制的连续调色板
对于一个更简单的接口定制连续色板,你可以使用light_palette() 或者 dark_palette()函数。它们都是单一颜色,并且能产生从亮值或者暗去饱和的值到这个颜色的调色板。伴随着这些函数,也同样有 choose_light_palette 和 choose_dark_palette 两个函数来交互式的调节创建调色板。
sns.palplot(sns.light_palette("green"))
sns.palplot(sns.dark_palette("purple"))
sns.palplot(sns.light_palette("navy", reverse=True))
它们也可以创建一个颜色映射对象,而不仅仅是颜色列表。
pal = sns.dark_palette("palegreen", as_cmap=True)
sns.kdeplot(x, y, cmap=pal);
默认情况下,任何有效的matplotlib颜色可以作为输入。另外辅助的解释可以由input参数来控制。目前你可以在hls或husl空间中提供默认的rgb元组,您还可以使用任何有效的xkcd颜色的种子。
sns.palplot(sns.light_palette((210, 90, 60), input="husl"))
sns.palplot(sns.dark_palette("muted purple", input="xkcd"))
需要注意的是,husl是提供交互的组件的默认input空间,这与函数自身默认的并不同,但这在背景下却是更有用的。
离散色板
调色板中的第三类被称为“离散”。这类色板适用于数据特征含有大的低值和大的高值。数据中通常有一个意义明确的中点。例如,如果你想要从某个基线时间点绘制温度变化,最好使用离散的颜色表显示相对降低和相对增加面积的地区。 除了你想满足一个低强度颜色的中点以及用不同起始颜色的两个相对微妙的变化,其实选择离散色板的规则类似于顺序色板。同样重要的是,起始值的亮度和饱和度是相同的。 同样重要的是要强调,应该避免使用红色和绿色,因为大量的潜在观众将无法分辨它们。 同样,Color Brewer颜色字典里也同时拥有一套精心挑选的离散颜色映射:
sns.palplot(sns.color_palette("BrBG", 7))
sns.palplot(sns.color_palette("RdBu_r", 7))
sns.palplot(sns.color_palette("coolwarm", 7))
定制的离散色板
你也可以使用seaborn函数 diverging_palette() 为离散的数据创建一个定制的颜色映射。(当然也有一个类似配套的互动工具:choose_diverging_palette())。该函数使用husl颜色系统的离散色板。你需要传递两种色调,并可选择性的设定明度和饱和度的端点。函数将使用husl的端点值及由此产生的中间值进行均衡。
sns.palplot(sns.diverging_palette(220, 20, n=7))
sns.palplot(sns.diverging_palette(145, 280, s=85, l=25, n=7))
sep参数控制面板中间区域的两个渐变的宽度。
sns.palplot(sns.diverging_palette(10, 220, sep=80, n=7))
也可以用中间的色调来选择调色,而不是用亮度。
sns.palplot(sns.diverging_palette(255, 133, l=60, n=7, center="dark"))
设置默认的调色板
color_palette() 函数有一个名为set_palette()的配套使用函数。 set_palette()。set_palette()接受与color_palette()相同的参数,但是它会更改默认的matplotlib参数,以便成为所有的调色板配置。
def sinplot(flip=1):
x = np.linspace(0, 14, 100)
for i in range(1, 7):
plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
sns.set_palette("husl")
sinplot()
color_palette()函数也可以在一个with块中使用,以达到临时更改调色板的目的。
with sns.color_palette("PuBuGn_d"):
sinplot()
with sns.color_palette("deep"):
sinplot()
seaborn教程2——颜色调控的更多相关文章
- seaborn教程1——风格选择
原文链接:https://segmentfault.com/a/1190000014915873 Seaborn学习大纲 seaborn的学习内容主要包含以下几个部分: 风格管理 绘图风格设置 颜色风 ...
- seaborn教程4——分类数据可视化
https://segmentfault.com/a/1190000015310299 Seaborn学习大纲 seaborn的学习内容主要包含以下几个部分: 风格管理 绘图风格设置 颜色风格设置 绘 ...
- seaborn教程3——数据集的分布可视化
原文转载:https://segmentfault.com/a/1190000015006667 Seaborn学习大纲 seaborn的学习内容主要包含以下几个部分: 风格管理 绘图风格设置 颜色风 ...
- [译]NeHe教程 - 添加颜色
原文: Adding Colour 上一节我讲解了如何在屏幕显示三角形和四边形.本节会讲解如何上色.单色(Flat)顾名思义就是只能涂一种实心的颜色.平滑颜色(Smooth)可以在各个顶点混合三种颜色 ...
- ZBrush软件特性之Marker标记调控板
在ZBrush®中使用Marker标记调控板来记忆物体属性,因此能在任何时间回到标记并使用它给其他物体或改变物体作为参考点. ZBrush软件下载:http://pan.baidu.com/s/1sl ...
- ZBrush软件特性之Color调控板
ZBrush®中的Color调色板显示当前颜色并提供数值的方法选择颜色,而且选择辅助色,使用描绘工具可以产生混合的色彩效果. ZBrush 4R8下载:http://wm.makeding.com/i ...
- HTML颜色名称大全
所有浏览器支持的颜色名称,所有现代浏览器都支持以下140种颜色名称(单击颜色名称或十六进制值,以将颜色视为背景颜色以及不同的文本颜色): 有关HTML颜色的完整概述,请访问我们的颜色教程. 颜色名称 ...
- 2015年9月29日html基础加强学习笔记
创建一个最简便的浏览器 首先打开VS2010,然后在空间里拖出一个Form控件当主页面,其次拖出一个Textbox控件作为地址栏,然后加一个Button控件作为按钮,最后拖出一个WebBrowser作 ...
- Highcharts中文网
官网地址: http://www.hcharts.cn/ http://www.hcharts.cn/p/highchartTable.php 名词解释 英文名 中文名 描述 更多 lang 语言 ...
随机推荐
- Manjaro美化 配置教程
Manjaro Linux的美化 切换源 sudo vi /etc/pacman.conf 加入arch源 [archlinuxcn] SigLevel = Optional TrustedOnly ...
- 【Database】Mysql分布式集群学习笔记
一.sql 的基本操作 (2018年11月29日,笔记) (1)数据库相关操作 创建数据库.查看数据库.删除数据库 #. 创建数据库 create database mytest default ch ...
- unixbench
1.下载 https://github.com/kdlucas/byte-unixbench/archive/v5.1.3.tar.gz 2.修改Makefile 交叉编译 #CC=gccCC = a ...
- 【串线篇】spring boot对静态资源的映射规则
WebMvcAutoConfiguration的内部类 WebMvcAutoConfigurationAdapter 其中ResourceProperties点进去 其中addResourceHand ...
- 学习python os commands socket模块
import os print(os.getcwd()) #获取当前路径, 导包也是从这个路径下面才能找到 # os.chdir('./..') #返回上一级路径,再获取路径看看 # print(os ...
- POJ 3889 Fractal Streets(逼近模拟)
$ POJ~3889~Fractal~Streets $(模拟) $ solution: $ 这是一道淳朴的模拟题,最近发现这种题目总是可以用逼近法,就再来练练手吧. 首先对于每个编号我们可以用逼近法 ...
- Linux内核设计与实现 总结笔记(第四章)进程调度
进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间. 调度程序没有太复杂的原理,最大限度地利用处理器时间的原则是,只要有可以执行的进程,那么就总会有进程正在执行. 一.多任务 多任 ...
- 2019 上海网络赛 F Rhyme scheme (字典树DP)
题目:https://nanti.jisuanke.com/t/41414 题意:求长度为n的第k个bell number , 就是第i位的选取范围在 1-(i-1)位的最大值 +1,第一位固定为 ...
- yii2框架的安装&配置启动
top:环境MacBook 1.通过composer 安装yii2 [yii2需要php的PDO和pdo_mysql扩展,需要确认已安装] a. 首先需要配置composer:我使用的是阿里云的镜像: ...
- p4111 [HEOI2015]小Z的房间[简述矩阵树定理]
分析 [1]无向图 图G的度数矩阵为D,邻接矩阵为A 我们定义这个图的Kirchhoff矩阵为D-A 这个矩阵的任意一个n-1阶主子式的行列式的绝对值就是这个图的生成树个数 [2]有向图 如果要求内向 ...