Вот несколько слегка откорректированных данных примера, чтобы сделать фигуру более четкой:
df <- data.frame(
"Date" = as.Date( c("2017-01-01","2018-01-01","2019-01-01") ),
"Value" = c(100,150,100),
"Cumulative Value" = c(100,250,350),
"Potential Value" = c(500,500,500)
)
Один подход с использованием geom_area + geom_ribbon:
ggplot(df, aes(y=`Cumulative.Value`, x=Date)) +
geom_area() +
geom_ribbon(aes(ymin = `Cumulative.Value`,
ymax = `Potential.Value`), fill = "gray80")
![enter image description here](https://i.stack.imgur.com/Sfo6R.png)
Или два geom_cols, потенциальный один позади:
ggplot(df, aes(y=`Cumulative.Value`, x=Date)) +
geom_col(aes(y = Potential.Value), fill = "gray80") +
geom_col( stat="identity")
![enter image description here](https://i.stack.imgur.com/is2tZ.png)
Или используйте geom_rect, который покажет области между известными значениями x. Здесь я устанавливаю дату окончания 30 дней спустя, чтобы мы могли видеть конечное значение. Сначала я нанесу «Потенциал» так, чтобы, если совокупный показатель превысил его, он был нанесен поверх него, как в вашем примере в крайнем правом углу.
ggplot(df, aes(xmin = Date,
xmax = lead(Date, default = max(df$Date) + 30))) +
geom_rect(aes(ymin = Cumulative.Value, ymax = Potential.Value), fill = "gray80")
geom_rect(aes(ymin = 0, ymax = Cumulative.Value)) +
![enter image description here](https://i.stack.imgur.com/NXwRg.png)