1

我正在尝试在 x 轴上生成具有不同时间日期格式标签的 ggplot2 图列表。然而,格式参数并未像 ggplot 预期的那样被考虑在内。这是可以重现该问题的最少代码。

x<-as.POSIXct(strptime(c("2013-01-01 00:00:00","2013-01-02 00:00:00"),format="%Y-%m-%d %H:%M:%S"))
y1<-c(0,1)
y2<-c(0,-1)
df<-data.frame(x=x,y1=y1,y2=y2)
f<-function(a,b){ggplot(df,aes_string(x="x",y=b))+geom_line()+ scale_x_datetime(labels= date_format(a))}
r<-mapply(f,c("%b-%d","%H:%M"),c("y1","y2"),SIMPLIFY=FALSE)

r[2]给出了预期的情节(对不起,我不能发布图片),但r[1]轴格式不正确(而要绘制的数据被正确考虑在内)。

有什么建议么?

4

1 回答 1

1

ggplot环境和mapply承诺评估之间,a没有被适当地评估,您可以通过force在函数中使用它来解决这个问题

例如

f<-function(a,b){
  a <- force(a)
  ggplot(df,aes_string(x="x",y=b))+geom_line()+ scale_x_datetime(labels= date_format(a))
}
r <- mapply(f,c("%b-%d","%H:%M"),c("y1","y2"), SIMPLIFY = FALSE)

r[1]

在此处输入图像描述

r[2]

在此处输入图像描述

解释一个惰性求值怪癖更详细地解释了惰性求值。

于 2013-04-16T05:38:09.817 回答