ggplot:geom_text打印的文本不清晰。

38

使用 geom_text 打印的文本不太清晰。我该如何使它更加清晰?

data = data.frame(rnorm(1000))
colnames(data) = "numOfX"
m <- ggplot(data, aes(x=numOfX))
m + geom_histogram(colour = "blue", fill = "white", binwidth = 0.5) +
  annotate("segment", x=10,xend=10,y=20,yend=0,arrow=arrow(), color="blue") +
  geom_text(aes(10, 30, label="Observed \n value"), color = "blue") 

在此输入图片描述


4
一个简单的解决方法是在 geom_text 中使用参数 check_overlap = TRUE - Dave Gruenewald
2个回答

52

使用 annotate 命令来标注文本和箭头:

m + geom_histogram(colour = "blue", fill = "white", binwidth = 0.5) +
  annotate("segment", x=10,xend=10,y=20,yend=0,arrow=arrow(), color="blue") +
  annotate("text", x=10, y=30, label="Observed \n value", color = "blue")

enter image description here


geom_text 每行数据都会绘制一次文本,而annotate只会绘制一次文本。正是这种重叠绘制导致了粗体、颗粒感的文本。

我确定最近已经回答了这个问题。我会试着找一个参考: 最近有类似的问题被问到:


所以在这种情况下,我们使用不同位置的标签向量时,应该使用 geom_text,这样它就不会像只有一个标签那样模糊,对吗? - Garini
2
奇怪的是,使用精确坐标进行重叠绘图会导致模糊。 - duhaime

7

在Dave Gruenewald的评论中提到,geom_text现在有了check_overlap选项。请查看tidyverse参考文献

check_overlap -- 如果为TRUE,则不会绘制与同一层中先前文本重叠的文本。check_overlap会在绘图时按照数据顺序进行检查。因此,在调用geom_text()之前,应该按标签列排列数据。请注意,geom_label()不支持此参数。

library(ggplot2)
data = data.frame(rnorm(1000))
colnames(data) = "numOfX"
m <- ggplot(data, aes(x=numOfX))
m + geom_histogram(colour = "blue",
                   fill = "white",
                   binwidth = 0.5) +
  annotate("segment",
           x = 10, xend = 10,
           y = 20, yend = 0,
           arrow = arrow(), color="blue") +
  geom_text(aes(10, 30, label="Observed \n value"),
            color = "blue", check_overlap = T)

enter image description here


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