我找不到在子组图中配置 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()
##
编辑:这个怎么样?
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]
关于r - data.table 图中的 X Axis 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24760879/