文章原创,最近更新:2018-05-11
1.使用xkcd颜色来命名颜色(离散型色板)
2.连续色板
3.cubehelix_palette()函数的连续调色板
4.light_palette() 和dark_palette()调用定制连续调色板
课程来源: python数据分析与机器学习实战-唐宇迪
学习参考链接:
1、Seaborn(sns)官方文档学习笔记(第二章 斑驳陆离的调色板)
2、Seaborn官方0.8.1版本
1.使用xkcd颜色来命名颜色(离散型色板)
这是seaborn提供非常好用的一种颜色调用方式.
xkcd包含了一套众包努力的针对随机RGB色的命名。产生了954个可以随时通过xdcd_rgb字典中调用的命名颜色。
怎么在实例项目中调用xkcd颜色呢?
如果熟悉xkcd的命名,就需要将xkcd的命名直接放到plot的参数中的sns.xkcd_rgb[],以此设置线条的颜色,并设置线宽lw的参数,如下:
import seaborn as sns
import matplotlib.pyplot as plt
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()函数,具体见如下案例:
import seaborn as sns
colors = ["windows blue", "amber", "greyish", "faded green", "dusty purple"]
sns.palplot(sns.xkcd_palette(colors))
输出结果如下:
如果想运用xkcd这套颜色,就必须要熟悉xkcd这套颜色的命名,可以上xkcd颜色官网网站查看.
2.连续色板
色彩随数据变换,比如数据越来越重要则颜色越来越深
所以对于连续的数据,最好是使用那些在色调上相对细微变化的调色板,同时在亮度和饱和度上有很大的变化。这种方法将自然地吸引数据中相对重要的部分.
Color Brewer字典有一大套这些调色板。它们是以在调色板中的主导颜色(或颜色)命名的。
代码如下:
import seaborn as sns
sns.palplot(sns.color_palette("BuGn"))
输出结果如下:
就像在matplotlib中一样,如果您想要翻转渐变,您可以在面板名称中添加一个_r后缀。
具体案例代码如下:
import seaborn as sns
sns.palplot(sns.color_palette("BuGn_r"))
输出结果如下:
seaborn还增加了一个允许创建没有动态范围的"dark"面板。如果你想按顺序画线或点,这可能是有用的,因为颜色鲜艳的线可能很难区分。
类似的,这种暗处理的颜色,需要在面板名称中添加一个_d后缀.
具体案例代码如下:
import seaborn as sns
sns.palplot(sns.color_palette("BuGn_d"))
输出结果如下:
3.cubehelix_palette()函数的连续调色板
cubehelix调色板系统具有线性增加或降低亮度和色调变化顺序的调色板。这意味着在你的映射信息会在保存为黑色和白色(为印刷)时或被一个色盲的人浏览时可以得以保留。
Matplotlib拥有一个默认的内置cubehelix版本可供创建:
import seaborn as sns
sns.palplot(sns.color_palette("cubehelix",8))
输出结果如下:
seaborn为cubehelix系统添加一个接口使得其可以在各种变化中都保持良好的亮度线性梯度。
通过seaborn的cubehelix_palette()函数返回的调色板与matplotlib默认值稍有所不同,它不会在色轮周围旋转或覆盖更广的强度范围。seaborn还改变了排序使得更重要的值显得更暗:
案例代码如下:
import seaborn as sns
sns.palplot(sns.cubehelix_palette(8))
输出结果如下:
可以用参数来seaborn.cubehelix_palette控制调色板的外观。要改变的两个参数是start(0到3之间的一个值)和一个参数是rot(在-1和1之间任意值)
案例代码如下:
import seaborn as sns
sns.palplot(sns.cubehelix_palette(8,start=.5,rot=-.75))
输出结果如下:
案例代码如下:
import seaborn as sns
sns.palplot(sns.cubehelix_palette(8,start=.75,rot=-.150))
输出结果如下:
4. light_palette() 和dark_palette()调用定制连续调色板
这里还有一个更简单的连续调色板的使用方式,就是调用light_palette() 和dark_palette(),这与一个单一颜色和种子产生的从亮到暗的饱和度的调色板。这些函数还伴有choose_light_palette() and choose_dark_palette()函数,这些函数启动了交互式小部件来创建这些调色板。
绿色连续调色板,案例代码如下:
import seaborn as sns
sns.palplot(sns.light_palette("green"))
输出结果如下:
紫色连续调色板,案例代码如下:
import seaborn as sns
sns.palplot(sns.light_palette("purple"))
输出结果如下:
这些调色板的颜色也可以翻转。设置light_palette()参数 reverse=True即可
翻转后的紫色连续调色板,案例代码如下:
import seaborn as sns
sns.palplot(sns.light_palette("purple",reverse=True))
输出结果如下:
翻转后的海军蓝连续调色板,案例代码如下:
import seaborn as sns
sns.palplot(sns.light_palette("navy",reverse=True))
输出结果如下:
它们也可以用来创建颜色映射对象取代颜色列表。
案例代码如下:
import seaborn as sns
import numpy as np
x, y = np.random.multivariate_normal([0, 0], [[1, -.5], [-.5, 1]], size=300).T
pal = sns.dark_palette("green", as_cmap=True)
sns.kdeplot(x, y, cmap=pal)
输出结果如下:
默认情况下,任何有效的matplotlib颜色可以传递给input参数。也可以在hls或husl空间中提供默认的rgb元组,您还可以使用任何有效的xkcd颜色的种子。
案例代码如下:
import seaborn as sns
sns.palplot(sns.light_palette((210, 90, 60), input="husl"))
输出结果如下:
案例代码如下:
import seaborn as sns
sns.palplot(sns.dark_palette("muted purple", input="xkcd"))
输出结果如下:
需要注意的是,为默认的input空间提供交互的组件是husl,这与函数自身默认的并不同,但这在背景下却是更有用的。