带有data.table的图中的X轴配置

时间:2014-07-15 14:29:20

标签: r plot data.table axis

我找不到在子组图中配置x轴的解决方案。 在一个简单的例子中,我希望看到x轴上的小时是核心问题。 (在更复杂的问题中,时间数据将以分钟为单位,并且组内行数的数量将是不规则的)

library(data.table)

DT<- data.table(ID=rep(1:5, times=6), time=seq(as.POSIXct("2014-07-07 01:00:00"),as.POSIXct("2014-07-09 11:00:00"), by= "2 hours"), outcome=sin(1:30))

setkey(DT, ID, time)

DT[,.SD[,plot(time, outcome)], by=ID]

然后我尝试了不同的方式。例如:

DT[, c(
   .SD[,plot(time, outcome, xaxt="n"),
   .SD[, axis.POSIXct(1, at = seq(min(time), max(time), by = "hour"), format = "%H")]
       ), by=ID]

也许使用.BY是一个解决方案或(.N, .I)我不知道如何使用。

在data.table包中,他们写道: “.BY是一个列表,其中包含每个项目的长度为1的向量。这可以是 当事先不知道时有用。 by变量也可用于j 直接按名称;例如,如果j是绘图命令,则对图表的标题很有用, 或者用if()分支,具体取决于组变量的值。“

任何建议都将受到赞赏

2 个答案:

答案 0 :(得分:1)

您是否有必要在plot()内使用DT?如果没有,

library(ggplot2)
ggplot(
  data=DT,
  aes(x=time,y=outcome,color=factor(ID)))+
  geom_point()+
  geom_line()
##

enter image description here

编辑:怎么样?

DT[
  ,
{plot(
  x=time,y=outcome,
  main=paste('ID: ', .BY),
  xaxt="n")
 axis.POSIXct(
   1,
   at=seq(
     min(time),max(time),by="hour"),
   format="%H")},
  ID]

enter image description here enter image description here

我不打算包括所有5个情节,但它们都会评估。

或者,您可以使用ggplot2完成此操作:

DT[
  ,
  {
    print(ggplot(
      data=.SD,
      aes(x=time,y=outcome))+
        geom_point(size=2,color="red")+
        geom_line()+
        scale_x_datetime(
          "Time",
          breaks=date_breaks(
            width="2 hours"),
          labels=date_format("%H")
        )+
        ggtitle(
          paste("ID: ",.BY))
      )
  },
  by=ID]

enter image description here

答案 1 :(得分:1)

不确定,但也许是这样的:

DT[, {
       x11(); 
       plot(time, outcome, type="l", xaxt="n"); 
       axis.POSIXct(1, at=time, format="%H");
       NULL # let's not return anything, for cleaner output
     }
   , by=ID]

??