给你的热图挑选一个合适的渐变色
一个合适的渐变色可以让我们的热图更加的美观,在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通过丰富的内置颜色梯度,以及灵活的自定义颜色梯度, 可以创建多种多样的热图,了解内置颜色梯度的适用场景,可以帮助我们快速的做出选择。
- 一步一步学lucene——(第二步:示例篇)
- 类属性的延迟计算
- 一步一步学lucene——(第三步:索引篇)
- 在Python应用中使用MongoDB
- Python检查xpath和csspath表达式是否合法
- 一步一步学lucene——(第四步:搜索篇)
- Python爬虫代理IP池
- SSDB图形界面管理工具:phpssdbadmin安装部署
- [Go 语言社区] 初始化内存数据--游戏列表数据
- SSDB安装配置记录
- Python标准库笔记(3) — datetime模块
- Django 1.10中文文档-第一个应用Part4-表单和通用视图
- Python标准库笔记(2) — re模块
- Python爬虫—破解JS加密的Cookie
- 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 数组属性和方法
- Python基于正则表达式实现计算器功能
- python利用os模块编写文件复制功能——copy()函数用法
- 解决python 虚拟环境删除包无法加载的问题
- Laravel框架路由管理简单示例
- php + WebUploader实现图片批量上传功能
- php查询内存信息操作示例
- ThinkPHP3.2框架操作Redis的方法分析
- python实现图像外边界跟踪操作
- php微信分享到朋友圈、QQ、朋友、微博
- Numpy 多维数据数组的实现
- 使用matplotlib的pyplot模块绘图的实现示例
- PHP get_html_translation_table()函数用法讲解
- Laravel中10个有用的用法小结
- PHP7 echo和print语句实例用法
- python上selenium的弹框操作实现