在7月份,本号推出了一个关于R语言配色方法的系列推文,其中第III节介绍了ggplot2工具包的配色方法——颜色标度函数

在这篇推文中,小编介绍了针对两种变量类型的三种颜色标度函数,即

  • 离散型变量:离散型标度

  • 连续型变量:连续型标度、分箱型标度

其中,离散型标度是把等数目的颜色依次赋值给离散变量的各个类别,连续型标度则由用户先指定颜色的极端值(和中间值),然后再由工具包通过计算来生成连续的颜色带。

分箱型标度虽然相当于将连续型变量转化为离散型变量,但其配色思想还是类似于连续型标度,即先由用户指定颜色的极端值(和中间值),再由工具包计算其余的颜色类别,以构成具有过渡特征的离散颜色带。

这种配色方法虽然方便,但缺点是用户不能够灵活地控制所生成的颜色带,尤其对缺乏色彩知识的用户来说,由于难以准确预判生产的颜色效果而很大可能会对结果不满意。

library(ggplot2)
library(patchwork)
set.seed(20211001)
df <- data.frame(x = 1:40, y = rnorm(40))
p <- ggplot(df, aes(x, y, color = y)) + geom_point(size = 2) + labs(x = NULL, y = NULL)
p1 <- p + scale_color_steps(low = "blue", high = "red")
p2 <- p + scale_color_steps(low = "blue", high = "red",breaks = c(-Inf, -1, 1, Inf))
p1 + p2

上面就是一个使用分箱型标度函数的案例,相对于左图,右图通过调用breaks参数实现了自定义分箱的数目,但颜色选取还是比较受限制。

与之相反的是,离散型标度虽然看起来比较繁琐,但其优点恰恰是灵活,用户日常中可以积累一些好看的颜色组合,在使用时再进行手动赋值;再者,grDevicesRColorBrewer等工具包还提供了大量的离散调色板,用户觉得满意就可以直接调用。

可惜的是,在ggplot2中,对连续型变量并不能调用离散型标度函数,否则会报错。如下例:

p + scale_color_brewer()
## 错误: Continuous value supplied to discrete scale

对于一些具有分类特征的变量,可以使用factor()函数直接将其转为离散型变量(即因子变量),但这种方法并不通用。下面小编就介绍一种通用的方法,使用的函数是scale_colour_stepsn()

scale_colour_stepsn()函数是分箱标度函数scale_colour_steps()的拓展版,其可以为颜色带指定若干个临界值(极端值+中间值)。基本思路如下:

  • 先通过n.breaksbreaks参数确定分箱的数目;

  • 再通过colorscolours参数指定等量的颜色临界值,在指定临界值时可以调用离散调色板。

p + scale_color_stepsn(n.breaks = 3,colors = grey.colors(4))

library(RColorBrewer)
p + scale_color_stepsn(breaks = c(-1.5, 0, 1.5),colors = brewer.pal(4, "Dark2"))

最后祝大家假期愉快!

ggplot2 | 如何对连续型变量使用离散型调色板进行配色相关推荐

  1. 连续型字段,离散型字段

    连续型字段,离散型字段     例如:为什么年龄是连续型字段?     我们举个例子,为什么年龄是连续型而不是离散型?区分这两者的关键点在于有穷性,离散型的字段是可以列举出所有情况的,如在" ...

  2. Python之pandas:利用describe函数统计【类别型】特征/离散型变量的描述性统计信息(包括个数count、unique、top及其freq、first、last)之详细攻略

    Python之pandas:利用describe函数统计[类别型]特征/离散型变量的描述性统计信息(包括个数count.unique.top及其freq.first.last)之详细攻略 目录 利用d ...

  3. plsql 中的记录型变量和引用型变量

    /* plsql 中的记录型变量和引用型变量 查询某个员工的姓名和工资 练习记录型变量: 定义变量: emp_rec emp%rowtype; sql语句: select * into emp_rec ...

  4. C++中字符型变量与整型的算术运算

    C++中字符型变量与整型的算术运算 字符型变量与整型的算术运算 C++中算术运算中的精度 下面的代码展示了上面表达式中类型的转换 数据类型的自动转换 字符型变量与整型的算术运算 最近在学习C++,经常 ...

  5. 分类型变量预测连续型变量_SPSS中的Variable数据变量类型介绍,一次性弄清无序分类变量、有序分类变量、 离散型数值变量、连续型数值变量的区别!...

    变量的概念:变量也就是就是一种可以进行测量的数据条目(data item),对于定义变量在统计里非常重要,特别是在进行SPSS分析的时候,需要明确定义一个变量的性质.打开SPSS软件时,数据录入界面上 ...

  6. ‘字符型‘变量和‘字符串型‘变量

    一.字符型   作用:字符型变量用于显示单个字符  语法:char ch=' a '(要用单引号,且单引号内只能用一个字符) char ch='a': cout<<ch<<en ...

  7. JAVA中用什么来定义布尔型变量_Java 布尔型

    Java 布尔型 接下来,我们准备为大家介绍"布尔型". "布尔型"--布尔型只有真或假,它是关系表达式的运算结果,真是true,而假是false,而这种类型主 ...

  8. c++字符型变量和字符串型变量

    #include<iostream> #include<string>//定义字符型变量要包含此头文件(c++类型) using namespace std;int main( ...

  9. 布尔型变量java_布尔型变量-Java计算机等级考试笔记

    布尔型变量 只能是true或false两个值之一的变量就是布尔(boolean)类型变量,true和false是布尔型直接量.你可以用下面的语句定义一个名称为state的布尔型变量: boolean ...

最新文章

  1. 范围解析操作符 (::)
  2. 常用命令-临时记录!
  3. python中处理日期和时间的标准模块是-Python时间相关处理
  4. 串行总线---差分互连(差分线)之共模、奇模、偶模
  5. 沭阳县依托运用大数据推进平安建设
  6. 验证码生成java_JAVA-验证码生成
  7. MAVEN构建的各个环节及常用maven命令
  8. android 仿360浮动,Android--模仿360底部导航按钮
  9. AtCoder Regular Contest 059
  10. golang select default continue_Golang+VSCode环境配置
  11. 卷积神经网络CNN是靠什么线索学习到深度信息的?
  12. python高级含金量技巧_2020年最新Python开发的高级技巧,面试必学
  13. 湖北二级计算机考试时间2015年,2015上半年湖北计算机等级考试时间
  14. powershell cs上线_BasUSB实现后台静默执行上线CobaltStrike
  15. ArrayList学习[常用方法|源码]
  16. 在Html5中与服务器交互
  17. 面试题:ES和Solr的区别是什么?
  18. 铅蓄电池首批规范企业名单出炉 多家上市公司入围
  19. c语言工具栏运行不见了,电脑下面的任务栏不见了怎么办 几种方法介绍
  20. IOS error:Images.xcassets: error: ERROR: Each TDDistiller instance can be distilled only one time!

热门文章

  1. SACC2019架构师大会PPT合集
  2. Nginx学习总结(15)—— 提升 Web 应用性能的十个步骤
  3. ELK学习总结(1)——我们为什么要用ELK
  4. html5 nodejs桌面开发工具,html5fromImages-nodejs生成器入门
  5. 计算机系班级海报,系部动态 | 电子系“五彩班栏”班级海报评比
  6. python mysql 写入_python如何写进MYSQL
  7. 分布式实时日志分析解决方案 ELK 部署架构
  8. python 的 virtualenv 环境搭建及 sublime 手动创建运行环境
  9. java监听器的原理与实现
  10. Android彻底组件化方案实践