是否可以使用循环在单个图中绘制成对的列?例如,如果我有一个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)
}
提前致谢。
答案 0 :(得分:1)
ggplot2
和reshape2
:
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)
答案 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
。
ADDED:格子解决方案。
答案 2 :(得分:0)
par(mfrow=c(1,5))
for (i in seq(1,10,by=2)){
plot(x[,i],x[,i+1])
}