如何避免geom_line绘制文本注释?

时间:2018-01-29 22:20:37

标签: r ggplot2

我有一个情节,我在每个点都有点,线和注释。问题是线条最终通过注释文本,我想找到一个解决方案来避免这种情况,例如:如何使注释成为“顶部”?

我的伪ggplot就像:

geom_line

请注意,如果我交换geom_pointADD . $APP_HOME的顺序,则该线将在该点的顶部绘制(当颜色当然不是黑色或者有透明度时)。但是,该行将直接通过注释文本进行绘制。

我该如何解决?到目前为止,我已选择不包括行,但会很好。

1 个答案:

答案 0 :(得分:3)

可能最好的选择是使用geom_label,它会在标签文本下方放置一个白色背景,覆盖该行(如果放在geom_line之后)。这样做的好处是,白色背景的大小可以精确地消除通过标签的那一行部分。

如果您有一个标签,就像下面的annotate代码一样,您可以单独使用geom_label。但是,如果您有多个可能重叠的标签,则需要两次调用,一次调用geom_label colour="white"以生成空白"标签"只是在那里覆盖该行,然后调用geom_text标签本身。这是因为单独使用geom_label时,标签背景会重叠并模糊重叠标签的文本。

library(tidyverse)
theme_set(theme_classic())

ggplot(mtcars[1:20,], aes(wt, mpg)) + 
  geom_line() +
  geom_label(aes(label=round(mpg,2)), colour="white", label.padding=unit(0.05,"lines"), 
             size=3) +
  geom_text(aes(label=round(mpg,2)), size=3) +
  annotate("label", 2.25, 27, label="Label", colour="red", label.size=0)

在上面的代码中,label.size=0摆脱了标签周围的边框。

enter image description here

另一个选择是在注释下面放置一个方形白点标记,但在行顶部:

ggplot(mtcars[1:20,], aes(wt, mpg)) + 
  geom_line() +
  geom_point(shape=15, colour="white", size=6) +
  geom_text(aes(label=round(mpg,2)), size=3) +
  annotate("point", 2.25, 27, pch=15, size=7, colour="white") +
  annotate("text", 2.25, 27, label="Label", colour="red")

enter image description here

你也可以使线条不那么突出。下面他们只是引导眼睛,但不要太介绍:

ggplot(mtcars[1:20,], aes(wt, mpg)) + 
  geom_line(linetype="11", colour="grey30", size=0.25) +
  geom_text(aes(label=round(mpg,2)), size=3) +
  annotate("text", 2.25, 27, label="Label", colour="red")

enter image description here