我有一个图,其中每个点都有点、线和注释。问题是行最终会穿过注释文本,我想找到一个解决方案来避免这种情况,例如如何使注释位于“顶部”?
我的伪 ggplot 是这样的:
# some df
ggplot(df,aes(x=x,y=y)) + geom_line() + geom_point() +
annotate('text', ...)
Run Code Online (Sandbox Code Playgroud)
请注意,如果我交换顺序geom_line,geom_point线条将绘制在该点的顶部(当然,当颜色不是黑色或存在透明度时)。但是,该线将直接穿过注释文本。
我该如何解决这个问题?到目前为止,我选择不包含线条,但会很好。
可能最好的选择是使用geom_label,它将在标签文本下方放置白色背景,覆盖该行(如果放置在 后面geom_line)。这样做的优点是,白色背景的大小将被调整为恰好空白将穿过标签的线条部分。
如果您有单个标签,如annotate下面的代码所示,则可以geom_label单独使用。但是,如果您有多个可能重叠的标签,则需要两次调用,一次调用geom_labelwithcolour="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)
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,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")
Run Code Online (Sandbox Code Playgroud)
您还可以使线条不那么突出。下面它们只是引导视线,但不会打扰太多:
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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1437 次 |
| 最近记录: |