You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 16:54:56