R 如何使用因子变量作为背景色绘制ggplot2?

R 如何使用因子变量作为背景色绘制ggplot2?,r,ggplot2,colors,R,Ggplot2,Colors,我正在使用ggplot2绘制一些数据(Y=变量.A)(X=Datetime)。我还有一个名为Photoperiod的变量,它指示这个Datetime是否属于白天,日出,日落或夜晚。出于解释目的,我想根据光周期用不同的颜色给我的绘图背景上色,以找到与此相关的模式。下面我分享一些虚假数据 df <- data.frame(Datetime = seq(from=as.POSIXct("2012-01-01 08:00", tz="UTC"),to=as.

我正在使用
ggplot2
绘制一些数据(Y=
变量.A
)(X=
Datetime
)。我还有一个名为
Photoperiod
的变量,它指示这个
Datetime
是否属于
白天
日出
日落
夜晚
。出于解释目的,我想根据
光周期
用不同的颜色给我的绘图背景上色,以找到与此相关的模式。下面我分享一些虚假数据

df <- data.frame(Datetime = seq(from=as.POSIXct("2012-01-01 08:00", tz="UTC"),to=as.POSIXct("2012-01-08 07:00", tz="UTC"),by="hour"),
                    Variable.A = sample(seq(from = 0, to = 4.9, by = 0.1), size = 168, replace = TRUE),
                    Photoperiod = rep(rep(c("Day","Sunset","Night","Sunrise"), c(12, 2, 8, 2)), length.out = 168))

head(df)
             Datetime Variable.A Photoperiod
1 2012-01-01 08:00:00        2.9         Day
2 2012-01-01 09:00:00        4.2         Day
3 2012-01-01 10:00:00        2.0         Day
4 2012-01-01 11:00:00        0.8         Day
5 2012-01-01 12:00:00        2.6         Day
6 2012-01-01 13:00:00        2.9         Day

正如我已经说过的,我想根据
光周期
级别对背景进行着色,以轻松识别循环模式

有人知道怎么做吗


提前谢谢

这不是最好的解决方案,因为您需要稍微调整一下值,但我以前用过。基本上,您可以在绘图上绘制平铺。希望这能有所帮助

库(tidyverse)

谢谢@MKR。我不知道为什么,但当我在我的真实场景中运行代码时,我得到了“1:删除了包含缺少值的168行(geom_tile)”,因此,颜色没有被绘制……不确定为什么。尝试“洋葱”方法:从:
geom_tile(aes(fill=Photoperiod))
开始,继续一个接一个地添加不同的参数,看看问题出在哪里。感谢您的想法@MKR。我发现了问题:我的
变量.A有一些NAs,但没有绘制颜色。你知道怎么解决这个问题吗?顺便说一句,谢谢你的时间。我不确定我是否能给你一个处理NA值的好方法。这取决于问题。您可以将其排除在绘图之外,也可以使用“缩放填充连续(na.value=”蓝色)的颜色,是否有办法从图例中删除值
0.5
5.9
ggplot(data = df)+ 
  aes(x=Datetime, y=Variable.A) +
  geom_line() +
  geom_point(size=1.5) + 
  labs(x='Date',y="\n ID") + 
  coord_capped_cart(bottom="both",left="both") +
  theme_bw() +
  theme(strip.background=element_blank(),
        axis.title.x =element_text(margin = margin(t = 12, r = 20, b = 0, l = 0),size = 16),
        axis.title.y =element_text(margin = margin(t = 2, r = 20, b = 0, l = 0),size = 16),
        axis.text.x = element_text(angle = 45, hjust = 1,size = 12),
        axis.text.y = element_text(angle = 0, hjust = 0.5,size = 14),
        strip.text.x = element_text(size = 14),
        strip.text.y = element_text(size = 13),
        axis.line = element_line(),
        panel.grid.major= element_blank(),
        panel.grid.minor = element_blank(),
        legend.text=element_text(size=12),
        legend.title = element_blank(),
        legend.key=element_blank(),
        legend.position = "top",
        panel.border = element_blank(),
        strip.placement = "outside") +
  scale_x_datetime(breaks = "6 hour") + 
  guides(colour = guide_legend(override.aes = list(size=3.5)))