R ggplot2-仅为x轴的一部分添加功能区

时间:2018-08-08 20:48:15

标签: r ggplot2

说我有两个数据集。其中一个包含两个月的数据:

units_sold <- data.frame(date = seq(as.Date("2017-05-01"), as.Date("2017-07-01"), 1), 
                     units = rep(20,62),
                     category = "units_sold")

还有一个只包含一周的时间:

forecast <- data.frame(date = seq(as.Date("2017-06-12"), as.Date("2017-06-18"), 1), 
                   units = 5,
                   category = "forecast")

我可以把它们放在同一块土地上。即

joined <- rbind(units_sold, forecast)
ggplot(data = joined, aes(x=date, y=units, colour = category)) + geom_line()

enter image description here

但是,我似乎无法弄清楚如何在两行之间放置一个功能区。 这就是我正在尝试的:

library(dplyr)
ribbon_dat <- left_join(forecast, units_sold, by = "date") %>%
              rename(forecast = units.x) %>%
              rename(units_sold = units.y) %>%
              select(-c(category.x, category.y))

ggplot(data = joined, aes(x=date, y=units, colour = category)) + 
geom_line() +
geom_ribbon(aes(x=ribbon_dat$date, ymin=ribbon_dat$forecast, ymax=ribbon_dat$units_sold))

我得到这个错误:错误:美学的长度必须为1或与数据(69)相同:x,ymin,ymax,y,颜色

1 个答案:

答案 0 :(得分:2)

您非常接近,您需要将第二个数据集传递到data中的geom_ribbon()参数。

ggplot(data = joined, aes(x = date)) + 
  geom_line(aes(y = units, colour = category)) +
  geom_ribbon(
    data = ribbon_dat,
    mapping = aes(ymin = forecast, ymax = units_sold)
  )