建立配色方案

最重要的用于建立独立配色方案的函数是color_palette()这个函数提供了许多(not all)在seaborn中生成颜色的方式。它在任意拥有palette参数的函数内部被使用(在某些需要多种颜色的情况下也可以转入color参数)。

color_palette()可以接受任意的seaborn调色板和matplotlib colormap(除了jet,当然你也不该用这玩意~)。它也可以接收一系列在任意有效的matplotlib格式(RGB tuples, hex color codes, or HTML color names)下设置好的颜色。它的返回值通常是一个RGB元组的list。 
最后,无参数调用color_palette()会返回默认的颜色集。 
相对应地,set_palette函数可以接受同样的参数,可以为所有图片设置颜色。你依旧可以在with语句下调用color_palette()来暂时修改默认调色板。(见下文)

一般而言,离开数据的具体特征讲着色都是耍流氓。所以我们分三种不同类型的调色板:分类色板、连续变化(颜色渐变)色板和发散(极端值深,中间值浅)色板,来讲解color_palette()和其他Seaborn 调色板函数。

  1. Sequential,按顺序渐变的。 - Light colours for low data, dark for high data
  2. Diverging,彼此之间差异变化较大的。 - Light colours for mid-range data, low and high contrasting dark colours
  3. Qualitative,这个用于最大程度地显示不同类之间的差别。 - Colours designed to give maximum visual difference between classes
# coding=utf-8import numpy as np
import seaborn as sns
import matplotlib.pyplot as pltsns.set()current_palette = sns.color_palette()
sns.palplot(current_palette)plt.show()

分类色板

分类(定类)色板是你在区分无特定顺序的离散数据时的最佳选择。

当你导入Seaborn库时,默认的颜色循环被改成一组六个颜色。这会让你想起matplotlib的颜色循环,当然咱这个漂亮多了。

默认的颜色主题有6种不同的风格,

deep, muted, pastel, bright, dark和colorblind。

使用圆形颜色系统

当你有6种以上颜色需要区分的时候,最简单的方式是在一个圆形的颜色空间内划出均匀间隔的颜色。(这样的色调变化会保证亮度和饱和度不变)。这是seaborn函数中大多数的默认方式。

最为常见的方式是采用hls颜色空间,这是一个RGB值的简单转换。

sns.palplot(sns.color_palette("hls", 8))#palplot是创建调色板  color_palette(颜色空间,设置几种颜色块)
plt.show()

### 调色板 ###
* 颜色很重要
* color_palette()能传入任何Matplotlib所支持的颜色
* color_palette()不写参数则默认颜色

* set_palette()设置所有图的颜色

data = np.random.normal(size=(20, 8)) + np.arange(8) / 2
sns.boxplot(data=data,palette=sns.color_palette("hls", 8))
plt.show()

hls_palette()函数来控制颜色的亮度和饱和

  • l-亮度 lightness
  • s-饱和 saturation
sns.palplot(sns.hls_palette(8, l=.7, s=.9))
plt.show()

使用分类Color Brewer 调色板

另一个非常漂亮的分类色板来源于Color Brewer(同样也具有连续色板和发散色板),它也同样存在于matplotlib colormaps中,但是并没有得到很好的处理。在Seaborn中,当你调用Color Brewer分类色板时,你总能得到离散的颜色,但是这意味着它们在某一点开始了循环。

非常棒的一点是,Color Brewer网站提供关于调色板的色盲安全指导。避开红绿吧

sns.palplot(sns.color_palette("Paired",8)) #两种分割的渐变
plt.show()

sns.palplot(sns.color_palette("Set2", 10))
  • 1


为了帮助你从Color Brewer library中选择调色板,我设计了choose_colorbrewer_palette。这个函数只能在IPython notebook中调用,其犯规一个交互式小部件,允许你浏览不同的选项及修改参数。

当然,你可能希望采用某一组你偏爱的颜色,因为color_palette接受颜色列表,这种诉求很容易实现。

flatui = ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71"]
sns.palplot(sns.color_palette(flatui))
  • 1
  • 2

使用xkcd颜色来命名颜色

xkcd包含了一套众包努力的针对随机RGB色的命名。产生了954个可以随时通过xdcd_rgb字典中调用的命名颜色

plt.plot([0, 1], [0, 1], sns.xkcd_rgb["pale red"], lw=1)
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_palette()函数传入列表来获取成组的颜色。

colors = ["windows blue", "amber", "greyish", "faded green", "dusty purple"]
sns.palplot(sns.xkcd_palette(colors))

连续色板

调色板中的第二大类被称为“连续(sequential)”色板。当数据从低值(不感兴趣)到高值(感兴趣)分布时采用这种色板非常合适。虽然有时你需要一个连续的离散颜色调色板(discrete colors in a sequential palette),这在使用kdplot()或corrplot函数时比较常见。

在这种情况下使用jet色彩映射(jet colormaps )或者彩虹调色板( rainbow palettes)最为常见,因为颜色的范围拥有提供数据额外信息的印象。但是过大的色调变化会带来数据本身不连续的错觉,并且视觉系统不能自然的通过“彩虹色”定量产生“高”、“低”之分。所以如此着色的可视化带来的更多是谜题,其隐藏了数据的特征而非揭露它们。实际上jet palette是非常糟糕的(particularly bad)因为黄色 青色这两种最明亮的颜色,被用于处于中间位置的数据。这过分强调了一些没有意义的中间数据而忽略了极值。

对于顺序数据最好应用那些在色调上只有细微变化,同时在饱和度和对比度上有很大变化的调色板。这种处理会吸引人们去关注数据中重要的部分。

Color Brewer library 中有许多如此的调色板,他们以调色板中的主颜色命名。

色彩随数据变换,比如数据越来越重要则颜色越来越深

sns.palplot(sns.color_palette("Blues"))

如果想要翻转渐变,可以在面板名称中添加一个_r后缀

sns.palplot(sns.color_palette("BuGn_r"))

在Seaborn中你可以对这些色板进行“暗处理”减少他们的亮度。如果你后续需要画线,这可以提供一些帮助。毕竟太过明亮可能导致线无法被看清。通过加入_d后缀达到

牢记,你可能想使用choose_colorbrewer_palette()函数取绘制各种不同的选项。如果你想返回一个变量当做颜色映射传入seaborn或matplotlib的函数中,可以设置as_cmap参数为True。

连续cubehelix调色板

cubehelix调色板系统中含有亮度线性变化同时色调变化的线性色板。这意味着在打印(黑白)时或被色盲使用时,你的着色仍然能产生一定的效果。

cubehelix_palette()   色调线性变换

sns.palplot(sns.color_palette("cubehelix", 8))

seaborn为cubehelix系统添加一个接口使得其可以在各种变化中都保持良好的亮度线性梯度。

cubehelix_palette()函数返回的默认色板与matplotlib默认有很大区别。它不会在色轮周围辐射太远,也不会覆盖过大的范围。它也调整了颜色的顺序,使得更重要的数据颜色更深。

sns.palplot(sns.cubehelix_palette(8))

cubehelix_palette()函数的其他参数主要是是控制色板的具体颜色。有两个主要的参数start和rot,还有rot的次数。

sns.palplot(sns.cubehelix_palette(8, start=.5, rot=-.75))

sns.palplot(sns.cubehelix_palette(8, start=.75, rot=-.150))

light_palette() 和dark_palette()调用定制连续调色板

sns.palplot(sns.light_palette("green"))

sns.palplot(sns.dark_palette("purple"))

sns.palplot(sns.light_palette("navy", reverse=True))

但是你可以运用as_cmap=True,将其传入matplotlib中。

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);

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);

默认情况下,任何有效的matplotlib颜色可以传递给input参数。也可以在hls或husl空间中提供默认的rgb元组,您还可以使用任何有效的xkcd颜色的种子。

sns.palplot(sns.light_palette((210, 90, 60), input="husl"))
  • 1

sns.palplot(sns.dark_palette("muted purple", input="xkcd"))
  • 1

需要注意的是,为默认的input空间提供交互的组件是husl,这与函数自身默认的并不同,但这在背景下却是更有用的。

离散色板

调色板中的第三类被称为“离散”。当你关注极端值时,应该采用这种着色方式。例如,如果你正在绘制温度变化从基线值,最好使用不同色图显示相对降低和相对增加面积的地区。 
选择离散色板的规则类似于顺序色板,除了你想满足一个强调的颜色中点以及用不同起始颜色的两个相对微妙的变化。同样重要的是,起始值的亮度和饱和度是相同的。

同样重要的是要强调,应该避免使用红色和绿色,因为大量的潜在观众将无法分辨它们。

你不应该感到惊讶的是,Color Brewer颜色字典里拥有一套精心挑选的离散颜色映射:

sns.palplot(sns.color_palette("BrBG", 7))
  • 1

sns.palplot(sns.color_palette("RdBu_r", 7))
  • 1

 
另一个在matplotlib中建立的明智的选择是coolwarm面板。请注意,这个颜色映射在中间值和极端之间并没有太大的对比.

sns.palplot(sns.color_palette("coolwarm", 7))
  • 1

定制diverging palettes

你可以运用diverging_palette()去创建一个定制的diverging色板。(当然也有一个类似配套的互动工具:choose_diverging_palette())。该函数使用husl颜色系统的离散色板。你需随意传递两种颜色,并设定明度和饱和度的端点。函数将使用husl的端点值及由此产生的中间值进行均衡。

sns.palplot(sns.diverging_palette(220, 20, n=7))
  • 1

sns.palplot(sns.diverging_palette(145, 280, s=85, l=25, n=7))
  • 1

 
sep参数控制面板中间区域的两个渐变的宽度。

sns.palplot(sns.diverging_palette(10, 220, sep=80, n=7))
  • 1

也可以用中间的色调来选择调色,而不是用亮度

sns.palplot(sns.diverging_palette(255, 133, l=60, n=7, center="dark"))
  • 1

设定默认色板

color_palette函数同样拥有set_palette()函数。两者之间的关系与之前相同。接受的参数也相同。但是set函数可以改变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)
  • 1
  • 2
  • 3
  • 4
sns.set_palette("husl")
sinplot()
  • 1
  • 2

color_palette函数同样可以应用于with语句中,暂时性改变色板。

with sns.color_palette("PuBuGn_d"):sinplot()
  • 1
  • 2

seaborn中的色板02详解相关推荐

  1. JS中的event 对象详解

    JS中的event 对象详解 JS的event对象 Event属性和方法: 1. type:事件的类型,如onlick中的click: 2. srcElement/target:事件源,就是发生事件的 ...

  2. USB CCID类协议中的APDU命令详解

    出处:http://blog.chinaunix.net/uid-29124653-id-4573075.html 原文地址:USB CCID类协议中的APDU命令详解 作者:jeffasdasd 最 ...

  3. [转]Flash socket通讯中的安全策略问题详解

    Flash socket通讯中的安全策略问题详解 昨天做测试的时候遇到一个问题,做好的SWF在Flash AS3中调试通过,但是发布到html中之后就无法得到数据了.查了一些资料之后找到了解决办法.这 ...

  4. html5代码转换为视频,HTML5中的视频代码详解

    摘要 腾兴网为您分享:HTML5中的视频代码详解,智学网,云闪付,易推广,小红书等软件知识,以及360win10,流量魔盒,fitbit,上港商城,安卓2.3.7,全民惠,五年级下册英语单词表图片,t ...

  5. VMware虚拟机文件夹中各文件作用详解

    VMware虚拟机文件夹中各文件作用详解 虚拟机的文件管理由VMware Workstation来执行. 一个虚拟机一般以一系列文件的形式储存在宿主机中, 这些文件一般在由workstation为虚拟 ...

  6. C++中substr()函数用法详解

    C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...

  7. php中 继承中的概念,JavaScript_JavaScript中的继承方式详解,js继承的概念 js里常用的如下 - phpStudy...

    JavaScript中的继承方式详解 js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于 ...

  8. Java中的static关键字详解

    ** Java中的static关键字详解 ** 在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法.调用一个静态方法就是 "类名.方法名" ,静 ...

  9. java多线程中的join方法详解

    java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...

最新文章

  1. cmake 注意事项
  2. HBase 2.0 之修复工具 HBCK2 运维指南
  3. 先学python还是先学数据库_跟着销售学python8-微信平台初次见识数据库(6)
  4. Python学习教程:0基础学Python?手把手教你从变量和赋值语句学
  5. 美部长施压堵华为,遭印度电信巨头现场驳斥 ;WhatsApp被曝漏洞:仅凭一张GIF动图黑客便可接管账户……...
  6. java 控制台五子棋_java控制台五子棋
  7. java二嗨租车项目_JAVA第二季项目实战———答答租车系统代码
  8. jsp连接mysql----------第一篇技术类文章
  9. flir红外数据集_FLIR联合Foresight推广长波红外+可见光四摄视觉系统
  10. 创建一个HashMap 集合,存储省份下的城市,key是为省份 value 是为该省份下的城市
  11. oracle创建PDB数据库
  12. 微信企业号开发,给用户推送信息
  13. Windows 句柄泄露学习总结
  14. Glide加载相同URL时由于缓存无法更新图片的问题
  15. visual basic 6 下载 和 Vb6sp6 下载
  16. python读取加密word_Python 实现加密过的PDF文件转WORD格式
  17. 更换服务器IP有哪些步骤?如何操作?
  18. 如何把IDEA中设置像eclipse默认铺开包层次结构
  19. 50天50个前端小项目(纯html+css+js)第十二天(FAQ 问题与回答框)
  20. Ubuntu下安装Datax-web数据交换平台

热门文章

  1. 0基础学图论!——图论精讲/详细/新手理解概念必看!
  2. 【usb】USB Core功能解析(一)-------linux那些事儿之我是usb
  3. 函数式编程-Stream流
  4. 论文:麦克风阵列增强
  5. 【愚公系列】2022年01月 攻防世界-进阶题-MISC-76(warmup)
  6. Mac 5年了 清理了一下多出了 70个G
  7. ant - java 构建工具
  8. GL benchmark测试解析
  9. DWZ的Ajax表单
  10. 在苹果MAC OS X Lion系统上使用Outlook for MAC 2011配置Exchange邮箱