增加geom_line绘图中标签之间的间距

6
假设我有一些使用 ggplotgeom_line 绘制的线条集。我想给这些线条加标签。我可以使用 directlabels 包中的 geom_dl 来实现,但即使使用提供的避免重叠的方法(例如 "last.qp"),我仍然认为标签之间太靠近了。
我该如何增加这些标签之间的间距(在这里是 y 方向上),而不需要手动使用 ggplot2::annotate 或类似的方法指定它们的位置?我接受不涉及 directlabels 包的答案,但如果可能的话,我想坚持使用它,因为它能很好地完成 95% 的线条标签工作。
tiebreak.big 中可能有一个提示,这里,但我无法让它起作用...
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(ggplot2)
library(tibble)
library(directlabels)
library(tidyr)

data <- tibble(x = 1:10) %>%
  mutate(y1 = x^2) %>%
  mutate(y2 = y1+0.5) %>%
  gather(key = var, value = value, y1, y2)

ggplot(data, aes(x = x, y = value, color = var)) +
  geom_line() +
  geom_dl(aes(label = var), method = list(cex = 1.2, dl.trans(x = x + 0.2), "last.qp"))

Plot


你看过 ggrepel 包吗?这是它的链接:https://cran.r-project.org/web/packages/ggrepel/vignettes/ggrepel.html - GordonShumway
1个回答

4
这里有一个使用ggrepel包的解决方案,它有许多自定义选项。
library(dplyr)
library(ggplot2)
library(tibble)
library(tidyr)
library(ggrepel)

data <- tibble(x = 1:10) %>%
  mutate(y1 = x^2) %>%
  mutate(y2 = y1+0.5) %>%
  gather(key = var, value = value, y1, y2)

ggplot(data, aes(x = x, y = value, color = var)) +
  geom_line() +
  geom_text_repel(aes(label = var),
                  nudge_x = 1,
                  force = 1,
                  box.padding = 1,
                  segment.alpha = .5,
                  data = data %>%
                    group_by(var) %>% 
                    filter(x == max(x)))

您可能需要调整forcebox.padding参数。

在此输入图片描述


这个很好用。使用 segment.alpha = 0direction = "y" 参数可以消除线条,使标签对齐更容易。 - tbadams45

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