我找不到在子组图中配置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()分支,具体取决于组变量的值。“
任何建议都将受到赞赏
答案 0 :(得分:1)
您是否有必要在plot()
内使用DT
?如果没有,
library(ggplot2)
ggplot(
data=DT,
aes(x=time,y=outcome,color=factor(ID)))+
geom_point()+
geom_line()
##
编辑:怎么样?
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]
我不打算包括所有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]
答案 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]
??