假设我有一个数据框df,它看起来像:
f t1 t2 t3
h 1 3 4
h 2 4 3
t 3 4 5
t 5 6 8
f为因子,$ t属性为与时间有序事件相关的数值。 我可以使用par(new = T)将时间序列t1叠加到t3,并手动隔离因子。 但是我想知道格子是否有某种方法可以做到这一点,其中叠加了时间序列 受到因素的制约。所以我们将有两个面板,其中重叠的时间序列对应于条件因子f。我见过的大多数例子每个因子只使用一个时间序列(向量)。我也想过使用平行图,但时间信息丢失了。 我也试过像
这样的东西xyplot(df$t1+df$t2+df$t3 ~seq(3) | factor(df$f))
,但它会丢失行序列连接。有人知道这是否可行?
这是使用非格子方法的非常粗略的说明。
x<-matrix(seq(12),4,3)
f<-c('a','a','b','b')
df<-data.frame(f,x)
layout(1:2); yr<-c(0,12); xr<-c(1,3);
plot(as.numeric(df[1,2:4])~seq(3),type='o',ylim=yr,xlim=xr,ylab='A')
par(new=T)
plot(as.numeric(df[2,2:4])~seq(3),type='o',ylim=yr,xlim=xr,ylab='A')
plot(as.numeric(df[3,2:4])~seq(3), type='o',ylim=yr,xlim=xr,ylab='B')
par(new=T)
plot(as.numeric(df[4,2:4])~seq(3),type='o',ylim=yr,xlim=xr,ylab='B')
答案 0 :(得分:1)
我添加了一个ID变量并使用package:reshape2
融合 dat
f t1 t2 t3 ID
1 h 1 3 4 1
2 h 2 4 3 2
3 t 3 4 5 3
4 t 5 6 8 4
datm <- melt(dat, id.vars=c("ID","f"), measure.vars=c("t1", "t2", "t3"))
> datm
ID f variable value
1 1 h t1 1
2 2 h t1 2
3 3 t t1 3
4 4 t t1 5
5 1 h t2 3
6 2 h t2 4
7 3 t t2 4
8 4 t t2 6
9 1 h t3 4
10 2 h t3 3
11 3 t t3 5
12 4 t t3 8
由于你要求它“覆盖”我使用group参数来保持ID的分开和“|”运算符为您提供“h”和“t”的两个面板:
xyplot(value~variable|f, group=ID, data=datm, type="b")
答案 1 :(得分:1)
(1)这可以使用xyplot.zoo
紧凑地完成。第一个语句将数据框转换为动物园系列(系列存储在zoo对象的列中),第二个语句将其绘制成屏幕参数定义每个系列显示在哪个面板中:
library(zoo)
library(lattice)
z <- zoo(t(df[-1]))
xyplot(z, screen = df$f, type = "o")
(2)或者如果希望在X轴上显示df
的列名,则将z
定义为以下(然后在上面发出xyplot
命令) :
z <- zoo(t(df[-1])), factor(names(df[-1])))
在第一个点使用xyplot
的 z
看起来像这样(除了X轴标签,第二个是相同的):
编辑:简化(2)