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)))