查看原文
其他

{ggplot2}如何自定义添加文本背景?

ANERYAN R语言数据分析指南 2023-06-15

欢迎关注「R语言数据分析指南」

近来经常在文章中看到很多图形在给轴文本添加阴影背景,如下图所示;之前介绍了如何在图形内部「按行|列」添加阴影,这次来介绍如何给文本添加阴影;下面介绍2个可执行的方法

安装R包并加载

package.list=c("tidyverse","grid","GGally","aplot")

for (package in package.list) {
  if (!require(package,character.only=T, quietly=T)) {
    install.packages(package)
    library(package, character.only=T)
  }
}

加载数据

load("data.Rdata")

修改默认主题

element_custom <- function(...) {
  structure(list(...), class = c("element_custom""element_blank"))
}

element_grob.element_custom <- function(element, label, x,y, ...)  {
  tg <- textGrob(label, y=y,gp=gpar(col=element$colour))
  padding <- unit(0.1,"line")
  rg <- rectGrob(y=y,width=grobWidth(tg)+padding,height=unit(1,"line")+padding, 
                 gp=gpar(fill = element$fill, col=NA, alpha=0.1))
  gTree(children=gList(rg, tg),width=grobWidth(tg) + padding, cl="custom_axis")
}

widthDetails.custom_axis <- function(x) x$width + unit(1,"mm"

案例一

df %>% ggplot(.,aes(X1,name,color=value,fill=value))+
  geom_tile(color="grey80",fill="white",size=0.5)+
  geom_point(pch=22,size=5)+
  geom_text(aes(label=signif),size=3,color="black")+
  labs(x = NULL,y = NULL,color=NULL)+
  scale_color_manual(values=color)+
  scale_fill_manual(values=color)+
  scale_x_discrete(expand=c(0,0)) +
  scale_y_discrete(expand=c(0,0),position="left")+
  theme_classic()+
  theme(axis.text.y = element_custom(colour="black",fill=c("grey20","white")),
        axis.ticks.y=element_blank(),
        axis.text.x=element_text(angle = 90,color="black",size=10,vjust=0.5),
        legend.position = "non")

可以看到过程及其繁琐也不便于理解,而且文本大小也增大了显的不兼容,那么该如何解决;答曰「拼图」,绘制一张主图,再绘制阴影文本图,「aplot」进行拼接完美解决问题,下面来看具体操作

案例二

p1 <- df %>% ggplot(.,aes(X1,name,color=value,fill=value))+
  geom_tile(color="grey80",fill="white",size=0.5)+
  geom_point(pch=22,size=5)+
  geom_text(aes(label=signif),size=3,color="black")+
  labs(x = NULL,y = NULL,color=NULL)+
  scale_color_manual(values=color)+
  scale_fill_manual(values=color)+
  scale_x_discrete(expand=c(0,0)) +
  scale_y_discrete(expand=c(0,0),position="left")+
  theme(axis.text.y = element_blank(),
        axis.ticks.y=element_blank(),
        axis.text.x=element_text(angle = 90,color="black",size=10,vjust=0.5),
        legend.position = "non")
p2 <- df %>% select(name) %>% distinct() %>% mutate(group="A") %>% 
  ggplot(aes(group,name))+
  geom_text(aes(group,name,label=name),size=3,color="black") +
  geom_stripped_rows()+
  theme(panel.grid.major = element_blank(),
        axis.text=element_blank(),
        axis.ticks = element_blank(),
        axis.title = element_blank())

拼图

p1 %>% insert_left(p2,width = 0.2)

好了今天的介绍到此结束,喜欢的小伙伴欢迎加入我的「VIP交流群」获取代码与数据,「付费99元」进群即可获取公众号一年的代码与PDF文档[同步更新中],当然也可以对此文进行任意金额打赏,后台会发送给您数据&代码,感谢各位的支持

欢迎大家扫描下方二位码加入「QQ交流群」,与全国各地上千位小伙伴交流

作者微信

「关注下方公众号下回更新不迷路」,也可在菜单栏处添加作者微信,备注单位+方向+姓名即可

{mmtable2}: 再探三线表绘制


ggplot2优雅的绘制卡通版棒棒糖图


一文搞定ggplot2图像添加阴影


ggraph包优雅的绘制网络图


2021年个人年度小总结


跟着PNAS学绘图-ggplot2绘制散点图添加渐变拟合曲线



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存