gpt4 book ai didi

r - 为什么 geom_text() 多次绘制文本?

转载 作者:行者123 更新时间:2023-12-04 12:20:42 27 4
gpt4 key购买 nike

请考虑以下最小示例:

library(ggplot2)
library(ggrepel)
ggplot(mtcars) +
aes(x = mpg, y = qsec) +
geom_line() +
geom_text(x = 20, y = 20, label = "(20,20)")

overplotted text

我想你可以很容易地看到文本“(20,20)”被严重过度绘制(实际上,我不知道这是否是正确的词。我的意思是文本在一个位置绘制了几次)。

如果我使用 annotate() ,这不会发生:
ggplot(mtcars) +
aes(x = mpg, y = qsec) +
geom_line() +
annotate("text", x = 20, y = 20, label = "(20,20)")

no overplotted text

“那你为什么不用 annotate()?”你可能会问。实际上,我不想使用文本进行注释,而是 标签 .而且我还想使用 {ggrepel} 包来避免过度绘图。但是看看会发生什么,当我尝试这个时:
ggplot(mtcars) +
aes(x = mpg, y = qsec) +
geom_line() +
geom_label_repel(x = 20, y = 20, label = "(20,20)")

many many labels

同样,绘制了许多标签,{ggrepel} 在防止它们重叠方面做得很好。但我只想 指向特定位置的标签。我真的不明白为什么会发生这种情况。我只为 x 提供了一个值, ylabel每个。我也试过 data = NULLinherit.aes = F并将值放入 aes()geom_label_repel()没有效果。我怀疑标签的数量与 mtcars 中的行数一样多。 .对于我的实际应用程序来说,这真的很糟糕,因为我在相应的数据集中有很多行。

你能在这里帮我一下吗,也许能简单解释一下为什么会发生这种情况以及你的解决方案为什么有效?非常感谢!

最佳答案

geom_textgeom_label_repel每行添加一个标签。因此,您可以为注释 geom 提交单独的数据集。例如:

library(ggplot2)
library(ggrepel)
ggplot(mtcars, aes(mpg, qsec)) +
geom_line() +
geom_label_repel(aes(20, 20, label = "(20,20)"), data.frame())

enter image description here

关于r - 为什么 geom_text() 多次绘制文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54900695/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com