前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >100-R可视化28-定制你自己的主题

100-R可视化28-定制你自己的主题

作者头像
北野茶缸子
发布2022-04-05 15:12:49
3790
发布2022-04-05 15:12:49
举报
  • 参考:
    • 4.7 Building New Graphical Elements | Mastering Software Development in R (bookdown.org)[1]

前言

在[[99-R可视化27-超级多的Rggplot绘图主题大全]],我们介绍了超级多的R 的主题,那么,有没有方法,我们可以自己定制一个theme 呢?

通过theme 设置,这个我们在[[57-R可视化6-ggplot2三部曲最终之进阶为菜鸟]] 中,也已经有过比较系统的介绍了。

毕竟有时候配置的完整主题并不能让我们十足的满意,而自己如果反复设置theme 的话,又犯了代码重复的禁忌,比如每张ggplot 对象后面都拖着这么一大坨东西:

代码语言:javascript
复制
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 的默认主题配置。

比如素颜是这样的:

代码语言:javascript
复制
p <- ggplot(data = cell_reduction_df) + 
  geom_point(aes(x = UMAP_1, y = UMAP_2, color = cell_anno),
             size = 0.5)
p

最简单的创建自定义主题的方法就是在巨人的肩膀上操作,比如我这里比较喜欢theme_bw 风格:

代码语言:javascript
复制
p + theme_bw()

那么我们除了在theme_set 中设置好了自定义主题外,可否自带的主题,亦或是其他包如ggtheme 中的主题,与我们设置的theme 结合起来呢?这里可以将他们+ 起来,我写成了一个函数,更加方便调用:

代码语言:javascript
复制
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对象:

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 北野茶缸子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 直接上手
  • 补充一些知识点
    • 参考资料
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档