目标:绘制一个跨越绘图窗口的矩形(geom_rect
)。
问题:无法让ggplot2接受xlims。
示例:
library(lubridate)
library(ggplot2)
#Data frame
df <- data.frame(time=seq(ymd_hm('2016-01-26 08:00'),ymd_hm('2016-01-26 18:00'), length.out = 100), y=rnorm(100), facto=rep(c('a','b'), each=50))
#Call to ggplot
ggplot(df, aes(time, y))+
geom_point()+
facet_wrap(~facto)+
geom_rect(aes(xmin=ymd_hm('2016-01-26 07:00'), xmax=ymd_hm('2016-01-26 20:00'), ymin=-1, ymax=1), fill='skyblue4', alpha=I(0.3), data=df[1,])
在下图中,矩形不会跨越绘图窗口(所需结果)。矩形越宽,窗口越宽,矩形永远不会到达两侧。
简单的答案似乎是设置xlims(How to set limits for axes in ggplot2 R plots?)。
但是,使用xlim
似乎没有(arg被忽略),您不能将coord_cartesian
与facet一起使用,并且应用scale_x_datetime
会产生意外结果:
ggplot(df, aes(time, y))+
geom_point()+
facet_wrap(~facto)+
geom_rect(aes(xmin=ymd_hm('2016-01-26 07:00'), xmax=ymd_hm('2016-01-26 20:00'), ymin=-1, ymax=1), fill='skyblue4', alpha=I(0.3), data=df[1,])+
scale_x_datetime(limits = c(ymd_hm('2016-01-26 08:00'),ymd_hm('2016-01-26 19:00')))
进一步尝试:
我试过释放facet_wrap
中的比例而没有效果。在xlim
,ggplot
和geom_point
的调用中,还尝试将geom_rect
作为单独的行和xlim调用。