从一个矩阵制作多个多线图
Making multiple multi-line plots from one matrix
我想知道是否有一种方法可以将 apply 函数与 matplot
函数结合起来,为矩阵中的每 n 列生成一个新图。
我目前有一个 1350 行 640 列的矩阵。我正在使用 matplot
:
绘制每 8 列所有行的值
png("cmpd1.png")
matplot(data[,1:8], type="l", y-lab="z-score", axes = F)
axis(side=2)
dev.off()
我想稍微自动化一下,让列值在每个循环中移动 8 个,并且 png 上的标签改变 1 个。
有人可以指路吗?
我认为有一个版本 lapply()
但循环也能完成工作
for(i in seq(1,ncol(data),8)){
png(paste0("cmpd",i,".png"))
matplot(data[,i:(i+7)], type="l", ylab="z-score", axes = F)
axis(side=2)
dev.off()
}
这是一个带有 vapply()
和格式化绘图名称的答案。返回关闭的设备id。
data <- matrix(rnorm(100*128),nrow = 100,ncol = 128)
vapply(seq(from=1,to=ncol(data)-8,by=8),
FUN = function (x) {
png(paste0("cmpd",formatC(width = 3, format = "d", flag="0", x=x%/%8),".png"))
matplot(data[,x:(x+8)], type="l", ylab="z-score", axes = F)
invisible(dev.off())
},
FUN.VALUE=integer(1)
)
我想知道是否有一种方法可以将 apply 函数与 matplot
函数结合起来,为矩阵中的每 n 列生成一个新图。
我目前有一个 1350 行 640 列的矩阵。我正在使用 matplot
:
png("cmpd1.png")
matplot(data[,1:8], type="l", y-lab="z-score", axes = F)
axis(side=2)
dev.off()
我想稍微自动化一下,让列值在每个循环中移动 8 个,并且 png 上的标签改变 1 个。 有人可以指路吗?
我认为有一个版本 lapply()
但循环也能完成工作
for(i in seq(1,ncol(data),8)){
png(paste0("cmpd",i,".png"))
matplot(data[,i:(i+7)], type="l", ylab="z-score", axes = F)
axis(side=2)
dev.off()
}
这是一个带有 vapply()
和格式化绘图名称的答案。返回关闭的设备id。
data <- matrix(rnorm(100*128),nrow = 100,ncol = 128)
vapply(seq(from=1,to=ncol(data)-8,by=8),
FUN = function (x) {
png(paste0("cmpd",formatC(width = 3, format = "d", flag="0", x=x%/%8),".png"))
matplot(data[,x:(x+8)], type="l", ylab="z-score", axes = F)
invisible(dev.off())
},
FUN.VALUE=integer(1)
)