当前位置: 首页 > java >正文

seaborn中的色板02详解

建立配色方案

最重要的用于建立独立配色方案的函数是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

233
为了帮助你从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

233

使用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()函数的其他参数主要是是控制色板的具体颜色。有两个主要的参数startrot,还有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

233

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

233

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

离散色板

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

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

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

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

233

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

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

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

233

定制diverging palettes

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

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

233

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

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

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

233

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

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

233

设定默认色板

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

233

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

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

233







http://www.xdnf.cn/news/11485.html

相关文章:

  • 仙五前补充资料
  • 2015届互联网名企校招网址一览表
  • 有刷QQ会员和7砖的软件?
  • 关于WEBQQ的实现(一)
  • 一条命令轻松解决 「应用程序 “xxx” 不能打开」的问题
  • 信息检索:搜索引擎---怎样量化评价搜索引擎的结果质量
  • 剑灵南天国服务器位置,剑灵南天国实验室申请地址_剑灵南天国实验室申请资格答案_游戏堡...
  • ios项目icon和default 等相关图标命名规则和大小设置
  • 央视网站“被黑”的技术性分析
  • 500G JAVA视频网盘分享 (JEECG开源社区)
  • HBase 集群问题集 永久RIT(Region-In-Transition)问题
  • APP账号密码传输安全分析
  • 记渣打银行科营中心的面试
  • 【自测】100道linux运维测试题,80分以上就是大神了
  • 【智商都是硬伤】数字逻辑推理题
  • 软考网络工程师总结
  • 部署篇 | MatrixOne与MySQL全面对比
  • 【正点原子FPGA连载】第二章 实验平台简介 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
  • 思维练习题
  • 2023除夕倒计时~HTML代码
  • 为什么说技术人也要有产品思维
  • 世界主要城市时区表_世界地理第二讲:世界主要地区之亚洲
  • 五笔输入法基础教程
  • 各纬度气候分布图_“极地气候”是高纬度寒冷气候的总称,包括冰原气候和苔原气候...
  • 基于Java开发的个人视频网站的搭建与实现[附源码]
  • scrapy配置多条pipelines存储csv文件,存MySQL数据库
  • 一款漂亮的网址永久发布页源码
  • AI建筑设计教程!15个万能模板,三个步骤让你成为设计师!
  • 四种视频播放器
  • 程序员转行都去干嘛了?产品经理很正常,这位卖烧饼的也太强了_程序员都转行去做什么去了