在[[99-R可视化27-超级多的Rggplot绘图主题大全]],我们介绍了超级多的R 的主题,那么,有没有方法,我们可以自己定制一个theme 呢?
通过theme 设置,这个我们在[[57-R可视化6-ggplot2三部曲最终之进阶为菜鸟]] 中,也已经有过比较系统的介绍了。
毕竟有时候配置的完整主题并不能让我们十足的满意,而自己如果反复设置theme 的话,又犯了代码重复的禁忌,比如每张ggplot 对象后面都拖着这么一大坨东西:
theme(panel.grid = element_blank()) + theme(axis.title = element_text(size = 18),
axis.text = element_text(size = 14),
legend.title = element_text(size = 12),
legend.text = element_text(size = 12),
text = element_text(family = "gochi"),
legend.background = element_rect(fill = "white"),
plot.caption = element_text(size = 10))
这看着就难受啊。
这里我们搭配theme_set
与ggplot 的默认主题配置。
比如素颜是这样的:
p <- ggplot(data = cell_reduction_df) +
geom_point(aes(x = UMAP_1, y = UMAP_2, color = cell_anno),
size = 0.5)
p
最简单的创建自定义主题的方法就是在巨人的肩膀上操作,比如我这里比较喜欢theme_bw 风格:
p + theme_bw()
那么我们除了在theme_set 中设置好了自定义主题外,可否自带的主题,亦或是其他包如ggtheme 中的主题,与我们设置的theme 结合起来呢?这里可以将他们+
起来,我写成了一个函数,更加方便调用:
peng_theme <- theme(
panel.grid = element_blank(),
axis.title = element_text(size = 18),
axis.text = element_text(size = 14),
legend.title = element_text(size = 12),
legend.text = element_text(size = 12),
plot.caption = element_text(size = 10),
plot.background = element_rect(fill = "gray90",
color = "gray60", size = 2),
legend.background = element_rect(fill = "white",
color = "gray60")
)
set_peng_theme <- function() {
theme_set(theme_bw() + peng_theme)
}
p + set_peng_theme()
不过这里受限于主题theme
函数控制的范围有限,所以可能其他内容还需要搭配如labs
, scale_**
等使用。
参见:4.6 Building a New Theme | Mastering Software Development in R (bookdown.org)[2]
设置一个统一风格的主题,除了能够方便你的调用,改善代码美观外,如果你是组织或是个人,还可以塑造你的形象:哇,这个图一看就是xxx做的。
比如像我这样的为坐标内的主图与分开的legend 加上阴影的效果:
我们可以直接从配置了theme 的ggplot 对象获取theme 对象疑惑通过theme_get()
返回,该函数默认返回默认的ggplot theme对象:
x <- theme_get()
> head(names(x))
[1] "line" "rect" "text"
[4] "title" "aspect.ratio" "axis.title"
此外,通常我们设置theme 时,complete 参数默认是F,这表示theme 仅仅会修改那些你传入修改的主题元素,而其他部分则会继承自 theme_gray() 或者其他主题。
如果你想要重头设计一个theme ,那么可以设置complete 为T,然后一个个手撕theme 中的元素。
我能力有限,就不介绍了。主要我也不会。
[1]
4.7 Building New Graphical Elements | Mastering Software Development in R (bookdown.org): https://bookdown.org/rdpeng/RProgDA/building-new-graphical-elements.html
[2]
4.6 Building a New Theme | Mastering Software Development in R (bookdown.org): https://bookdown.org/rdpeng/RProgDA/building-a-new-theme.html