如何在ggplot2的日期轴绘图中使用geom_rect添加背景色块
报错原因
你遇到的报错是ggplot2的全局美学映射继承规则导致的:
你在初始化ggplot对象p的时候,把y=number写在了顶层的aes()里,这个映射会默认被后续所有添加的图层继承。当你新增geom_rect图层时,该图层使用的数据集是rects,没有number字段,系统找不到y映射对应的字段,就抛出了object 'number' not found的错误。
解决方法
提供两种可直接运行的方案:
方案1(改动量最小,推荐)
在geom_rect中手动关闭美学继承,添加inherit.aes = FALSE参数即可:
p + geom_rect(data = rects, mapping=aes(xmin = start, xmax = end, ymin = -Inf, ymax = Inf, fill = name), alpha = 0.4, inherit.aes = FALSE)
方案2(拆分全局映射)
初始化绘图时不要把y=number设置为全局映射,仅在需要用到的折线、点图层单独设置:
# 重新初始化绘图对象 p <- ggplot(data=df, aes(x=date)) + geom_line(aes(y=number)) + geom_point(aes(y=number)) + scale_x_date(date_breaks = "1 year", date_labels = "%Y") # 再添加矩形图层就不会报错 p + geom_rect(data = rects, mapping=aes(xmin = start, xmax = end, ymin = -Inf, ymax = Inf, fill = name), alpha = 0.4)
内容的提问来源于stack exchange,提问作者Cenlle
相关产品推荐
相关产品推荐

