【问题标题】:Making multiple multi-line plots from one matrix从一个矩阵制作多个多线图
【发布时间】:2018-02-16 13:26:26
【问题描述】:

我想知道是否有办法将 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。 有人可以指路吗?

【问题讨论】:

标签: r plot matplotlib-widget


【解决方案1】:

这是带有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)
)

【讨论】:

    【解决方案2】:

    我认为有一个带有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()
    }
    

    【讨论】:

    • 应该是i:(i+7)。像这样一次有 9 列。
    • 这行得通,除了它也将每个 png 更改了 8 个,但我只是为此创建了另一个变量。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多