Я пытаюсь создать диаграмму, содержащую несколько линий, а также точечные элементы. Метки для линий должны быть в легенде, а метки для точек должны быть на диаграмме. Пока что это код, который я использую для создания этого
library(ggplot2)
library(ggrepel)
theme_set(theme_minimal())
chart_df <- structure(list(date = structure(c(18295, 18302, 18309, 18316,
18323, 18330, 18337, 18344, 18351, 18358, 18365, 18372, 18379,
18386, 18393, 18400, 18407), class = "Date"), cum_sum_cases = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 6L, 71L, 273L, 517L, 929L, 1333L, NA,
NA, NA, NA), peak = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, 3745L, NA), peak_label = c(NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Actual peak: 3745",
NA), forecast_cum_sum_cases = c(NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, 1854, 2363, 3528, 4173), forecast_peak = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 3528,
NA), forecast_peak_label = c(NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, "Forecasted peak: 3528", NA), true_cum_sum_cases = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2019L, 2624L,
3745L, 4559L)), row.names = c(NA, -17L), class = "data.frame")
#Plot
ggplot(data = chart_df, aes(x = date)) +
geom_line(aes(y=cum_sum_cases, color = "Actual cases"), size = 1.5) +
geom_line(aes(y=true_cum_sum_cases, color = "Ground truth cases"), size = 1.5) +
geom_line(aes(y=forecast_cum_sum_cases, color = "Forecasted cases"), linetype = "twodash", size = 2) +
scale_color_manual("", values = c("Actual cases" = "darkred", "Ground truth cases" = "green", "Forecasted cases" = "steelblue")) +
geom_point(aes(y=peak), color = "darkred", size = 2) +
geom_label_repel(aes(y= peak, label=peak_label)) +
geom_point(aes(y=forecast_peak), colour = "steelblue", size = 2) +
geom_label_repel(aes(y= peak, label=forecast_peak_label)) +
ylab("Total confirmed cases") +
xlab("Date")
Однако в этом случае я могу видеть только вторую метку точки даже при использовании пакета ggrepel
. Поскольку две отображаемые точки расположены близко друг к другу, мне нужно, чтобы R автоматически разделял их, если это возможно. Кроме того, есть ли способ, чтобы легенда действительно соответствовала аргументу linetype
в вызове geom_line()
?