Лучший подход - преобразовать x
в числовую переменную, чтобы ось x могла быть правильно размещена.tidyr::separate_rows
может разделять начальную и конечную даты на разные строки, что позволяет построить все это одной строкой:
library(tidyverse)
df <- data_frame(x = c("1991-1995", "1996-2000", "2001-2005", "2006-2010"),
y = c(0, 1.492, 3.2162, 7.7719),
lower = c(0, -0.19782, 0.97042, 4.66051),
upper = c(0, 3.1818, 5.462, 10.8833))
df %>%
separate_rows(x, convert = TRUE) %>%
ggplot(aes(x, y, ymin = lower, ymax = upper, label = round(y, 2)[c(TRUE, NA)])) +
geom_ribbon(alpha = 0.3) +
geom_line() +
geom_point() +
geom_text(nudge_y = .4)
С этого момента вы можете настраивать много, если хотите.