如何为timetk包plot_time_series生成的时序图添加阴影区域
报错原因
plot_time_series返回的是标准ggplot对象,生成时默认将datetime设置为全局x轴美学映射,所有后续新增图层默认会继承这个全局映射。你调用geom_rect时传入的shade数据框中没有datetime字段,又没有关闭全局映射继承,ggplot渲染图层时会尝试从shade中查找datetime字段,因此触发报错。另外你现有代码里shade数据框的定义行末尾遗漏了右括号,也需要先补全才能正常生成shade数据。
解决方法
timetk的plot_time_series没有内置无采样区间阴影标注的专用参数,由于该函数返回的是标准ggplot对象,直接补充ggplot图层是最简便的实现方案,无需额外安装依赖(timetk本身依赖ggplot2,你的运行环境已经包含相关组件)。
修正后的完整代码如下:
# 补全shade数据框定义的右括号 shade = data.frame( x1 = c("2016-08-18 05:00:00","2016-08-18 15:00:00"), x2 = c("2016-08-24 01:00:00","2016-08-24 05:00:00"), y1 = c(10,10), y2 = c(150,150) ) # 转换时间格式 shade$x1 <- as.POSIXct(shade$x1, format="%Y-%m-%d %H:%M:%S", tz = "UTC") shade$x2 <- as.POSIXct(shade$x2, format="%Y-%m-%d %H:%M:%S", tz = "UTC") # 添加阴影图层,新增inherit.aes = FALSE关闭全局映射继承 lol2 <- lol + geom_rect( data = shade, aes(xmin = x1, xmax = x2, ymin = y1, ymax = y2), fill = "green", alpha = 0.5, inherit.aes = FALSE ) # 打印出图 lol2
如果你的分面场景需要仅在指定分面显示阴影,只需在shade数据框中新增与分面维度对应的字段,填入对应分面的取值即可。
内容的提问来源于stack exchange,提问作者Shelby Bloom
相关产品推荐
相关产品推荐

