ggsci
是一个知名的ggplot2
拓展包,工具包名称中的sci
是science的缩写。它的开发者是两个中国人:Nan Xiao <https://nanx.me>、Miaozhu Li <http://miaozhu.li>。
ggsci
工具包拓展了ggplot2
绘图系统的颜色标度函数,并且遵从scale_col_*
和scale_fill_*
式的命名规则。它的优点在于可以快速生成符合学术品味的配色,并且针对一些著名期刊还开发了对应的颜色标度函数。除期刊外,还有一些配色灵感来自数据可视化库、科幻电影和电视。
工具包中的函数可以分为如下两大类、四小类:
颜色标度函数:
scale_fill_*
、scale_color_*
;调色板函数:
pal_*
、rgb_*
。
其中scale_fill_*
和scale_color_*
类型的函数的用法与ggplot2
中的颜色标度函数一致,大部分为离散型标度函数;pal_*
和rgb_*
函数可以输出这些标度函数所对应的颜色编码。
ggsci
工具包中所有函数及其功能可以通过这个网址查看:https://mirrors.tuna.tsinghua.edu.cn/CRAN/web/packages/ggsci/vignettes/ggsci.html。
比如,scale_fill_npg()
和scale_fill_aaas()
函数可以分别用来实现Nature和Science杂志的配色风格:
library(ggplot2)
library(patchwork)
df <- data.frame(x = c("a", "b", "c", "d"), y = c(3, 4, 1, 2))
p <- ggplot(df, aes(x, y, fill = x)) +
geom_bar(stat = "identity") +
labs(x = NULL, y = NULL) +
theme(legend.position = "none")
library(ggsci)
p1 <- p + scale_fill_npg()
p2 <- p + scale_fill_aaas()
p1 + p2
著名医学期刊柳叶刀(The Lancet)和美国医学会杂志(JAMA)的配色风格:
p3 <- p + scale_fill_lancet()
p4 <- p + scale_fill_jama()
p3 + p4
还有一些来自数据可视化库的配色风格:
p5 <- p + scale_fill_ucscgb()
p6 <- p + scale_fill_d3()
p5 + p6
以上举例都属于离散型颜色标度函数,这些函数的语法结构如下:
scale_fill_*(palette, alpha = 1, ...)
palette:调色板;具体需要查看各个函数的帮助文档;
alpha:透明度;数值越小,透明度越高;
...:
ggplot2
绘图系统中的离散标度函数的公共参数。
同一个函数不同的调色板:
p7 <- p + scale_fill_uchicago(palette = "light")
p8 <- p + scale_fill_uchicago(palette = "dark")
p7 + p8
ggsci
工具包还提供了两种连续型的颜色标度函数,它们比离散标度函数多了一个reverse
参数:
scale_fill/color_gsea()
;scale_fill/color_material()
。
scale_color_gsea()
函数会生成一个蓝-红的颜色渐变带:
set.seed(107)
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_gsea()
p2 <- p + scale_color_gsea(reverse = T)
p1 + p2
scale_color_material()
函数提供了19种单色颜色渐变带,颜色类型需要通过palette
参数指定,具体见该函数的帮助文档:
p3 <- p + scale_color_material()
p4 <- p + scale_color_material(palette = "purple",
alpha = 0.6)
p3 + p4
除了直接进行配色外,还可以使用pal_*
和rgb_*
类的函数输出它们的颜色编码,这样就可以将这些配色风格保留下来了。前者对应的是离散型标度函数,后者对应的是连续型标度函数。在得到这些颜色的编码后,就可以在更广范围内运用这些配色风格了,而不再局限于ggplot2
绘图系统里。
pal_*
函数举例:
pal_npg()(4)
## [1] "#E64B35FF" "#4DBBD5FF" "#00A087FF" "#3C5488FF"
pal_uchicago(palette = "dark")(5)
## [1] "#800000FF" "#767676FF" "#CC8214FF" "#616530FF" "#0F425CFF"
rgb_*
函数举例:
rgb_gsea(n = 5, reverse = T)
## [1] "#D60C00FF" "#FF6B79FF" "#E9D0FBFF" "#7D7CFCFF" "#4500ACFF"
rgb_material(palette = "purple", n = 5)
## [1] "#F2E5F4FF" "#C887D3FF" "#A335B5FF" "#7F20A4FF" "#4A138CFF"