如何在R中使用facet控制geom_rect()的xlim?

3

目标: 绘制一个跨越绘图窗口的矩形 (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,])

在下面的图中,矩形没有覆盖整个绘图窗口(期望结果)。矩形越宽,窗口也会变得更宽,但矩形从未触及到窗口边缘。

enter image description here

简单的答案似乎是设置xlims(如何在ggplot2 R图中设置坐标轴限制?)。
然而,使用xlim似乎不起作用(arg被忽略),你不能在facets中使用coord_cartesian,并且应用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')))

请注意x值不再准确表示 输入图像描述

进一步尝试: 我已经尝试在facet_wrap中释放比例,但没有效果。还尝试过单独调用xlim和在ggplotgeom_pointgeom_rect的调用中使用xlim

1个回答

4
geom_rect(xmin = -Inf, xmax = Inf, ymin = -1, ymax = 1,
          fill = 'skyblue4', alpha = I(0.3), data = df[1, ])

解决问题的方法:

在此输入图片描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接