r - data.table 图中的 X Axis 配置

标签 r plot data.table axis

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

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 是一个列表,其中包含 by 中每个项目的长度为 1 的向量。这可以是 当事先不知道 by 时很有用。 by 变量也可用于 j 直接说出名字;如果 j 是绘图命令,则对于图形标题很有用, 或者根据组变量的值使用 if() 进行分支。”

如有任何建议,我们将不胜感激

最佳答案

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

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

关于r - data.table 图中的 X Axis 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24760879/

相关文章:

r - ggplotly 无法在 Shiny 的应用程序中工作,绘图未显示

r - 如何自动绘制具有相同行数和列数的多个 CSV 文件?

RStudio read.xl 工作目录错误

r - 在R中获取堆积面积图

r - 使用 data.table 提取指定关键字之间的字符串的第一个实例的最佳方法

r - lubridate 解析日期休息一天

matplotlib - dpi 与图形大小的关系

python - 设置图例以多行显示(在python中)

R plyr 应用于行

根据组(按行)data.frame 根据条件替换每列中的值