在向绘图添加注释文本时,我注意到geom_text()产生了难看的锯齿状文本,同时annotate()产生了流畅,漂亮的文本.有谁知道为什么会发生这种情况,如果有办法解决它?我知道我可以在annotate()这里使用,但有些情况可能geom_text()会更好,我想找到一个解决办法.此外,geom_text()不能打算给出看起来不好的文字,所以要么我做错了,要么我遇到了某种微妙的副作用.
这里有一些假数据和生成图表的代码,以及显示结果的图像.
library(ggplot2)
age = structure(list(age = c(41L, 40L, 43L, 44L, 40L, 42L, 44L, 45L,
44L, 41L, 43L, 40L, 43L, 43L, 40L, 42L, 43L, 44L, 43L, 41L)),
.Names = "age", row.names = c(NA, -20L), class = "data.frame")
ggplot(age, aes(age)) +
geom_histogram() +
scale_x_continuous(breaks=seq(40,45,1)) +
stat_bin(binwidth=1, color="black", fill="blue") +
geom_text(aes(41, 5.2,
label=paste("Average = ", round(mean(age),1))), size=12) +
annotate("text", x=41, y=4.5,
label=paste("Average = ", round(mean(age$age),1)), size=12)
Run Code Online (Sandbox Code Playgroud)

Bri*_*ggs 65
geom_text尽管没有直接从agedata.frame中使用任何东西,仍然使用它作为其数据源.因此,它在地块上放置20份"平均值= 42.3",每行一份.多次覆盖使它看起来如此糟糕. geom_text设计用于将文本放在图中,其中信息来自data.frame(在原始ggplot调用中直接或间接地给出它).annotate专为简单的一次性添加而设计(它创建一个geom_text,负责数据源).
如果您真的想使用geom_text(),只需重置数据源:
ggplot(age, aes(age)) +
scale_x_continuous(breaks=seq(40,45,1)) +
stat_bin(binwidth=1, color="black", fill="blue") +
geom_text(aes(41, 5.2,
label=paste("Average = ", round(mean(age$age),1))), size=12,
data = data.frame()) +
annotate("text", x=41, y=4.5,
label=paste("Average = ", round(mean(age$age),1)), size=12)
Run Code Online (Sandbox Code Playgroud)

geom_text(..., check_overlap = TRUE)*从文档?geom_text中check_overlap说:
如果为TRUE,则不会绘制与同一图层中的先前文本重叠的文本。
library(ggplot2)
age = structure(list(age = c(41L, 40L, 43L, 44L, 40L, 42L, 44L, 45L,
44L, 41L, 43L, 40L, 43L, 43L, 40L, 42L, 43L, 44L, 43L, 41L)),
.Names = "age", row.names = c(NA, -20L), class = "data.frame")
ggplot(age, aes(age)) +
geom_histogram() +
stat_bin(binwidth=1) +
geom_text(aes(41, 5.2, label=paste("Average = ", round(mean(age),1))),
size=12,
check_overlap = TRUE)
Run Code Online (Sandbox Code Playgroud)
* 这实质上是Dave Gruenewald在评论Brian出色答案时发表的答案。我只是想让这个答案更明显!
| 归档时间: |
|
| 查看次数: |
6653 次 |
| 最近记录: |