请考虑以下最小示例:
library(ggplot2)
library(ggrepel)
ggplot(mtcars) +
aes(x = mpg, y = qsec) +
geom_line() +
geom_text(x = 20, y = 20, label = "(20,20)")
我想您可以很容易地看到文本“(20,20)”被严重过度绘制(实际上,我不知道这是否是正确的词。我的意思是文本在一个位置绘制了多次)。
如果我使用annotate()
,这不会发生:
ggplot(mtcars) +
aes(x = mpg, y = qsec) +
geom_line() +
annotate("text", x = 20, y = 20, label = "(20,20)")
“那么,你为什么不使用annotate()
那么呢?”你可能会问。实际上,我不想使用文本进行注释,但是labels。我还想使用 {ggrepel} 包来避免过度绘制。但是看看当我尝试这个时会发生什么:
ggplot(mtcars) +
aes(x = mpg, y = qsec) +
geom_line() +
geom_label_repel(x = 20, y = 20, label = "(20,20)")
同样,绘制了许多标签,并且 {ggrepel} 在防止它们重叠方面做得很好。但我只想one指向特定位置的标签。我实在不明白为什么会出现这种情况。我只提供了一个值x
, y
and label
每个。我也尝试过data = NULL
and inherit.aes = F
并将值放入aes()
within geom_label_repel()
没有效果。我怀疑标签的数量与行的数量一样多mtcars
。对于我的实际应用程序来说,这非常糟糕,因为我在相应的数据集中有很多行。
您能在这里帮助我,并简要解释一下为什么会发生这种情况以及您的解决方案为何有效吗?多谢!