给你的热图挑选一个合适的渐变色
一个合适的渐变色可以让我们的热图更加的美观,在matplotlib中内置了许多的渐变色,如何挑选合适的渐变色就诚成为了一个问题,这么多的渐变色,其分布有没有什么规律,挑选的时候有没有什么技巧呢?
答案是有的,matplotlib内置的渐变色可以分为以下4大类
1. sequential
2. diverging
3. cyclic
4. qualitative
每一大类都有各自的适用场景,下面来具体看下
1. sequential colormaps
sequential系列大多数都是在某种单一颜色的基础上,通过改变色彩的饱和度而形成的渐变色,所以适用于数值分布线性分布的情况,绝大多数情况下,该系列的渐变色可以作为首选。
在该系列中,又细分为以下3类
1. perceptually uniform sequential colormaps
2. sequential colormaps
3. sequential2 colormaps
第一类对应的渐变色图示如下
其中,viridis是matplotlib中热图的默认渐变色。第二类对应的渐变色图示如下
来源于ColorBrewer系列色彩中的单色。第三类对应的渐变色图示如下
2. diverging colormaps
该系列通常由两种颜色构成,从一种颜色过滤到另外一种颜色,先是饱和度组逐渐减小,再然后饱和度逐渐增大,具体的渐变色图示如下
该系列适合数据有中值和左右两个边界的情况,最经典的就是相关系数了,相关系数的取值范围为-1到1,-1到0是负相关,0到1是正相关,对于这样的数据,用该系列渐变色就特别的合适。
3. cycling colormaps
该系列的起点和终点是相同的颜色,中间可以混合多种颜色的渐变,具体的渐变色图示如下
对于围绕中心对称的数据,采用该系列比较合适。
4. qualitative colormaps
该系列适合数据是离散分布的情况,是有多个独立颜色组合而成的渐变色,具体的渐变色图示如下
除了以上4大类外,还有一类内置的,针对某种具体场景而开发的渐变色,称之为miscellaneouse colormaps, 具体的渐变色图示如下
内置的这一系列渐变色,已经能够满足绝大多数的需求了。当然,如果这些你都不满意,matplotlib也支持自定义渐变色,主要有以下两种方式
1. ListedColormap
2. LinearSegmentedColormap
第一种方式直接将单独的颜色合并构成一个颜色梯度,第二种方式则根据指定的颜色,通过颜色的渐变来形成颜色梯度,用法如下
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
colors = ["darkorange", "gold", "lawngreen", "lightseagreen"]
cmap_list = ListedColormap(colors)
cmap1 = LinearSegmentedColormap.from_list("mycmap", colors)
用ListedColormap来绘制热图,代码如下
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> np.random.seed(123456789)
>>> data = np.random.rand(25).reshape(5, 5)
>>> plt.imshow(data, cmap = cmap)
>>> plt.colorbar()
输出结果如下
用LinearSegmentedColormap来绘制热图,代码如下
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> np.random.seed(123456789)
>>> data = np.random.rand(25).reshape(5, 5)
>>> plt.imshow(data, cmap = cmap1)
>>> plt.colorbar()
输出结果如下
matplotlib通过丰富的内置颜色梯度,以及灵活的自定义颜色梯度, 可以创建多种多样的热图,了解内置颜色梯度的适用场景,可以帮助我们快速的做出选择。
- IDEA使用总结
- Maven就是这么简单
- SVN就是这么简单
- 01 深入理解JVM的内存区域
- 设置Windows默认中文、Putty掉线解决、SublimeText3常用设置
- 通过oracle类比MySQL中的字节字符问题(r4笔记第44天)
- Spring MVC的配置和使用
- Oracle总结【SQL细节、多表查询、分组查询、分页】
- 关于内存异常的一个猜想(r4笔记第43天)
- WebSocket就是这么简单
- 09(01)总结final,多态,抽象类,接口
- 01 Mybatis 的配置和使用
- Oracle总结【视图、索引、事务、用户权限、批量操作】
- 02 使用Mybatis的逆向工程自动生成代码
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法