【问题标题】:Increasing spacing between labels for geom_line plot增加 geom_line 图的标签间距
【发布时间】:2018-04-23 17:04:24
【问题描述】:

假设我有一组使用ggplotgeom_line 绘制的线。我想标记这些行。我可以使用directlabels 包中的geom_dl 来做到这一点,但即使使用提供的方法来避免重叠(例如"last.qp"),我仍然认为标签是两个靠得很近的。

如何增加这些标签之间的间距(此处为 y 方向),无需使用ggplot2::annotate 或类似的东西手动指定它们的每个位置?我对不涉及 directlabels 包的答案持开放态度,但如果可能的话,我想坚持使用它,因为它可以很好地完成 95% 的标记线工作。

tiebreak.big 中可能有提示 here,但我无法让它工作......

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"))

【问题讨论】:

标签: r ggplot2 ggrepel direct-labels


【解决方案1】:

这是使用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" 参数可以消除线条,也可以更轻松地对齐标签。