【问题标题】:How to control xlim with geom_rect() in R with facets?如何在 R 中使用 geom_rect() 控制 xlim 和 facets?
【发布时间】:2016-01-27 23:17:36
【问题描述】:

目标:绘制一个横跨绘图窗口的矩形 (geom_rect)。

问题:无法让 ggplot2 接受 xlim。

示例

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 与构面一起使用,并且应用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 中释放天平,但没有效果。还尝试在对ggplotgeom_pointgeom_rect 的调用中单独调用xlim 和xlim。

【问题讨论】:

    标签: r ggplot2 rectangles facet-wrap


    【解决方案1】:
    geom_rect(xmin = -Inf, xmax = Inf, ymin = -1, ymax = 1,
              fill = 'skyblue4', alpha = I(0.3), data = df[1, ])
    

    解决问题:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-15
      • 1970-01-01
      • 2017-06-18
      • 2019-09-30
      • 2018-06-27
      • 2020-07-18
      • 1970-01-01
      相关资源
      最近更新 更多