R:数据帧中的循环对列

时间:2014-01-31 05:50:47

标签: r loops plot

是否可以使用循环在单个图中绘制成对的列?例如,如果我有一个10列(x1,x2 .. x10)的时间序列数据帧,我想创建5个图:第一个图将显示x1和x2,第二个图将显示x3和x4等上。

任何绘图方法都很有用,(zoo,lattice,ggplot2)。

我被困在创建一个循环来绘制单个变量:

set.seed(1)

x<- data.frame(replicate(10,rnorm(10, mean = 0, sd = 1)))
cols <- seq(1,10) 

library(zoo)
z <- read.zoo(x)

for (i in cols) {
plot(z[,i], screen = 1)
}

提前致谢。

3 个答案:

答案 0 :(得分:1)

ggplot2reshape2

的情况如何
require(reshape2)
require(ggplot2)
m<-melt(matrix(z,10))
m$facet<-cut(m$Var2,c(0,2,4,6,8,10))
ggplot(m)+geom_line(aes(x=Var1,y=value,group=Var2,color=factor(Var2)))+facet_wrap(~ facet)

enter image description here

答案 1 :(得分:1)

它可以在没有像这样的循环的单行中完成,其中col参数指定奇数系列是黑色而偶数是红色。请注意,问题中的z有9列(因为x中的第一列是时间索引)所以我们在下面使用了10列z,而这可能是预期的。

library(zoo)
# test data
set.seed(123); z <- zoo(matrix(rnorm(250), 25)); colnames(z) <- make.names(1:10)

plot(z, screen = rep(colnames(z)[c(TRUE, FALSE)], each = 2), col = 1:2)

输出如下所示。要生成单个列,请添加参数nc=1或生成格点图,将plot替换为xyplot

enter image description here

ADDED:格子解决方案。

答案 2 :(得分:0)

像这样?虽然我不清楚你想如何绘制它。

par(mfrow=c(1,5))
for (i in seq(1,10,by=2)){

  plot(x[,i],x[,i+1])
}