如何在带有构面的 R 中使用 geom_rect() 控制 xlim?
How to control xlim with geom_rect() in R with facets?
目标:绘制一个横跨绘图 window.
的矩形 (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,])
在下图中,矩形不跨越绘图 window(期望的结果)。矩形越宽,window 越宽,矩形永远不会到达边。
简单的答案似乎是设置 xlims (How to set limits for axes in ggplot2 R plots?)。
但是,使用 xlim
似乎没有用(arg 被忽略),您不能将 coord_cartesian
与 facets 一起使用,并且应用 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
作为单独的行调用,并在 ggplot
、geom_point
和 geom_rect
.
的调用中尝试使用 xlim
geom_rect(xmin = -Inf, xmax = Inf, ymin = -1, ymax = 1,
fill = 'skyblue4', alpha = I(0.3), data = df[1, ])
解决问题:
目标:绘制一个横跨绘图 window.
的矩形 (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,])
在下图中,矩形不跨越绘图 window(期望的结果)。矩形越宽,window 越宽,矩形永远不会到达边。
简单的答案似乎是设置 xlims (How to set limits for axes in ggplot2 R plots?)。
但是,使用 xlim
似乎没有用(arg 被忽略),您不能将 coord_cartesian
与 facets 一起使用,并且应用 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
作为单独的行调用,并在 ggplot
、geom_point
和 geom_rect
.
geom_rect(xmin = -Inf, xmax = Inf, ymin = -1, ymax = 1,
fill = 'skyblue4', alpha = I(0.3), data = df[1, ])
解决问题: