当我使用多个几何图形时,我正在努力在带有直接标签的线图的右端创建标签。这是一个例子:
#load packages
library(dplyr)
library(ggplot2)
library(tidyr)
library(directlabels)
#create data
set.seed(1)
test <- tibble(year = as.factor(rep(1990:2000, 4)),
label = rep(replicate(4, paste0(sample(letters, 20), collapse = "")), each =11), #create long random labels
value = rnorm(44))
test[which(test$year==2000),]$value <- seq(0,0.1, length.out = 4) # make final values very similar
average <- test %>%
group_by(year) %>%
summarize(value = mean(value)) %>%
bind_cols(label = "average")
#draw plot
ggplot(test, aes(x = year, y = value, group = label, color = label)) +
geom_line() +
geom_smooth(data = average,
mapping = aes(x = year, y = value, group = label, color = label),
inherit.aes = F, col = "black") +
geom_dl(aes(label = label,
color = label),
method = list(dl.combine("last.bumpup"))) +
theme(legend.position = "none")
这给出了这个情节:
现在我想在 geom_smooth 线的右侧添加一个黑色标签,上面写着“平均”。我在尝试过的一些方法中发现的一个问题是,当我单独创建它时它与其他标签重叠并且它不会以黑色显示。
例如:
ggplot(test, aes(x = year, y = value, group = label, color = label)) +
geom_line() +
geom_smooth(data = average,
mapping = aes(x = year, y = value, group = label, color = label),
inherit.aes = F, col = "black") +
geom_dl(aes(label = label,
color = label),
method = list(dl.combine("last.bumpup"))) +
geom_dl(data = average,
mapping = aes(label = label,
color = label),
method = list(dl.combine("last.bumpup"))) +
theme(legend.position = "none")
给出了这个情节:
总而言之,我希望为 geom_smooth 创建一个与 geom_smooth 线颜色相同且不与其他标签冲突的标签。
一个警告:我不能使用 stat_summary (如其他地方所建议的那样),因为在我的实际数据中,平均值是加权的,由于我不知道权重,我不能从单个数据点到平均值。所以我需要取数据框中提供的平均值。
更新
在我的实际数据中,标签要长得多(10-30 个字符),其中一些在最高年份的 y 值非常相似。这就是为什么我使用带有碰撞参数的直接标签。如果标签不相互排斥,可能会有重叠。