R包ggsci:一步完成CNS级别的图片配色
最近在修图,遇到的问题就是,往往我自己认为配色很不错,一旦发到老板手上,就会被无情的打回,让我换一个新的配色。直到前几天,我搜到一个非常不错的R包“ggsci”,终于完美地解决了我的问题,制作出了让老板满意的配图。今天的推文,就和大家简单谈谈这个好用的工具。
工具简介
ggsci提供了一组适合科学期刊,数据可视化,使用的高质量调色板。另外一个优点就是,ggsci包中的调色板可直接嵌套到ggplot2中使用。对于所有调色板,相应的function分别命名为:
- scalecolorpalname()
- scalefillpalname()
另外该包的另一个特点就是,它将常用的图片配色,按照期刊杂志喜欢的颜色类型封装了起来,我们可以通过简单地function来对我们的图片进行配色:
实战演练
数据准备
首先,我们先用ggplot2,分别画一个散点图和一个直方图。配色就直接采用,ggplot2 default的颜色。
library("ggsci")
library("ggplot2")
library("gridExtra")
data("diamonds")
p1 <- ggplot(
subset(diamonds, carat >= 2.2),
aes(x = table, y = price, colour = cut)
) +
geom_point(alpha = 0.7) +
geom_smooth(method = "loess", alpha = 0.05, size = 1, span = 1) +
theme_bw()
p2 <- ggplot(
subset(diamonds, carat > 2.2 & depth > 55 & depth < 70),
aes(x = depth, fill = cut)
) +
geom_histogram(colour = "black", binwidth = 1, position = "dodge") +
theme_bw()
直方图:
总体感觉配色怎么样?是不是感觉说不上很难看,但是总感觉就不符合发表高水平文章的配色(对的,这其实就是各位老板内心的想法)。
ggsci的使用
那么这时候当然就是轮到我们R包ggsci的出场。
首先,我们来试一试Nature的配色:
p1 + scale_color_npg()
p2 + scale_fill_npg()
散点图:
直方图:
感觉高端了很多有没有?行,不喜欢Nature的配色,咱们试一试Science的:
p1 + scale_color_aaas()
p2 + scale_fill_aaas()
散点图:
直方图:
这个配色稍微深一些,但是看起来也不错。
最后让我们再试一试柳叶刀的配色:
p1 + scale_color_lancet()
p2 + scale_fill_lancet()
散点图:
直方图:
这个配色给我感觉就是挺fresh的。
小结
配色是科研作图的一个大难题,使用ggsci能够一定程度上快速解决这个问题。当然如果你的老板或者导师不喜欢这里的配色,你可能还要花更多时间去找到合适的配色。另外,我决定以后我文章初稿里面所有的配图都要使用Science的配色,虽然我的文章难发到Science上,但是至少我的图片配色是Science级别的^_^!
参考资料
ggsci的介绍资料:https://nanx.me/ggsci/articles/ggsci.html
- 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 数组属性和方法
- 蓝牙芯片----BK3431开发笔记------基本外部驱动应用(3)
- .net core 利用中间件处理常见的网站功能 包括 session、routers、重定向、重写和文件下载
- 蓝牙芯片----BK3431开发笔记------RW stack中添加自定义服务教程(4)
- 图像简单处理
- 蓝牙---BLE GATT介绍
- Access数据库密码破解 C#
- 没啥用,更换注册表信息使webbrower选择适合的版本
- linux下分割和合并压缩包
- 编译.net .net Core程序 代码,仅做备份
- js删除数组对象中符合条件的数据
- .net core webapi jwt 更为清爽的认证 ,续期很简单(2)
- 手把手教你写一个windows服务 【基于.net】 附实用小工具{注册服务/开启服务/停止服务/删除服务}
- 一网打尽枚举操作 .net core
- Jenkins 发布.net core 程序,服务端无法下载nuget包的解决方法 error NU1102: 找不到版本为 (>= 3.1.6) 的包
- NET Core Kestrel部署HTTPS 一个服务器绑一个证书 一个服务器绑多个证书