其他
{ggplot2}如何自定义添加文本背景?
欢迎关注「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绘制散点图添加渐变拟合曲线