如何避免标签重叠?

5
我使用ggplot2创建了一张图形,但是有些标签重叠了。我希望能够显示所有标签而不重叠。这有可能吗?如何实现?我知道geom_text有一个“check_overlap”的选项,可以控制是否显示标签,但这并不是我想要的。我想要并需要显示所有标签。
我的代码:
ggplot(data, aes(x=DRTG, y=ORTG)) +
  geom_point(colour = "#000000") + 
  ggtitle("Gráfico Liga DIA: Ratio Ofensivo / Ratio Defensivo (hasta jornada 8)") +
  geom_text(label=rownames(data), colour = "#000000", nudge_x = 0, nudge_y = 1, size = 4, fontface = "bold", check_overlap = F) +
  geom_point(data=pointMedia, aes(x=mediaDRTG, y=mediaORTG, colour="red", size = 1)) + 
  geom_vline(xintercept = pointMedia[, "mediaDRTG"], colour = "green") + 
  geom_hline(yintercept = pointMedia[, "mediaORTG"], colour = "blue") +
  geom_text(data=pointMedia, aes(x=mediaDRTG, y=mediaORTG, label="Liga DIA"), nudge_x = 0, nudge_y = 1, colour = "red", fontface = "bold") +
  theme(legend.position = "none") +
  geom_abline(intercept =0 , slope = 1, colour = "orange")+ xlim(70,115) + ylim(70,115)

同时,一些标签重叠的图片:

输入图片描述


1
也许可以将文本位置指定为向量: nudge_y=c(1,1,...,0.6,1.2,...) - Heikki
嗯,听起来很有趣...我要试一下!!因为如果我可以移动标签到我想要的位置...也许就不会有标签重叠了!! - José Carlos
2
请查看以下内容:http://blog.revolutionanalytics.com/2016/01/avoid-overlapping-labels-in-ggplot2-charts.html - moodymudskipper
另一个不错的选择 Moody_Mudskipper!!! 谢谢!!! - José Carlos
2
这是关于ggrepel包的案例。https://cran.r-project.org/web/packages/ggrepel/vignettes/ggrepel.html - Claus Wilke
显示剩余4条评论
1个回答

3

将之前的评论转换为答案。

不要仅仅传递一个常量值给geom_textnudge_y:

ggplot(data, aes(x=DRTG, y=ORTG)) +
  geom_text(label=rownames(data), colour = "#000000", 
            nudge_x = 0, nudge_y = 1, size = 4, fontface = "bold", check_overlap = F)

如果需要,您可以传递一个完整的向量,例如 my_nudge_y

my_nudge_y=c(1,1,...,0.6,1.2,...)
ggplot(data, aes(x=DRTG, y=ORTG)) +
  geom_text(label=rownames(data), colour = "#000000", 
  nudge_x = 0, nudge_y = my_nudge_y, size = 4, fontface = "bold", check_overlap = F)

你可以使用它来单独调整字符串位置。
通常,解决重叠问题并不容易,因为即使是相对较少的文本,绘图区域也会开始填充文本。

是的,这是一个不错的解决方案,但请检查其他解决方案,其中推荐使用ggrepel库提供其他解决方案。 - José Carlos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接