ggplot2中geom_text被x轴标签遮挡的问题排查与解决
解决ggplot2结合xkcd包绘图时文本被x轴标签遮挡的问题
问题场景
我使用R语言的ggplot2结合xkcd包绘制学习时间与考试分数的关系图,初始代码如下:
library("xkcd") library("extrafont") library("ggplot2") library("gridExtra") X <- c(0,20) prova_A <- 0 + 5*X # 曲线A的分数计算逻辑 prova_B <- 0 + 4*X # 曲线B的分数计算逻辑 graph_3 <- ggplot() + geom_path(aes(X, prova_A), col = "darkorange") + geom_point(aes(c(0,20), c(0,100))) + geom_path(aes(X, prova_B), col = "red") + geom_point(aes(c(0,20), c(0,80))) + xkcdaxis(c(0,20),c(0,100)) + xlab("时间") + ylab("分数") + ggtitle("备考分数变化") + theme(plot.title = element_text(hjust = 0.5)) + geom_text(aes(label = "t = "), x = 19, y = -7, family = "xkcd", size = 5.5) graph_3
尝试将geom_text的y轴位置调整为-8或-9时,标注文本“t = ”会被x轴标签“时间”遮挡,无法完整显示。使用check_overlap参数也无法解决该问题,期望文本能清晰显示在x轴标签上方。
解决方案
通过修改scale_x_continuous的刻度标签,将x轴最大值(20)的标签直接设置为“t = 20”,替代额外的geom_text标注,完美解决遮挡问题。修改后的代码如下:
graph_3 <- ggplot() + geom_path(aes(X, prova_A), col = "darkorange") + geom_point(aes(c(0,20), c(0,100))) + geom_path(aes(X, prova_B), col = "red") + geom_point(aes(c(0,20), c(0,80))) + xkcdaxis(c(0,20),c(0,100)) + xlab("时间") + ylab("分数") + ggtitle("备考分数变化") + theme(plot.title = element_text(hjust = 0.5)) + scale_x_continuous(breaks = seq(0,20,by = 5) , labels = ~if_else( .x < 20, as.character(.x) ,paste0( "t = ", .x))) graph_3
内容的提问来源于stack exchange,提问作者VICTOR M S DELGADO
相关产品推荐
相关产品推荐

