我有一个情节,我在每个点都有点,线和注释。问题是线条最终通过注释文本,我想找到一个解决方案来避免这种情况,例如:如何使注释成为“顶部”?
我的伪ggplot就像:
geom_line
请注意,如果我交换geom_point
和ADD . $APP_HOME
的顺序,则该线将在该点的顶部绘制(当颜色当然不是黑色或者有透明度时)。但是,该行将直接通过注释文本进行绘制。
我该如何解决?到目前为止,我已选择不包括行,但会很好。
答案 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
摆脱了标签周围的边框。
另一个选择是在注释下面放置一个方形白点标记,但在行顶部:
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")
你也可以使线条不那么突出。下面他们只是引导眼睛,但不要太介绍:
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")