增加 geom_line 图标签之间的间距
Increasing spacing between labels for geom_line plot
假设我有一些使用 ggplot
和 geom_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"))
这是使用 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)))
您可能想尝试使用 force
和 box.padding
参数。
假设我有一些使用 ggplot
和 geom_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"))
这是使用 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)))
您可能想尝试使用 force
和 box.padding
参数。