2017-09-07 17 views
2

matplot関数とapply関数を組み合わせて行列のn列ごとに新しいプロットを生成する方法があるのだろうかと思います。1つの行列から複数のマルチラインプロットを作成する

私は現在、1350行と640列のマトリックスを持っています。私はmatplot使用して、すべての8列のすべての行の値をプロットしています:

png("cmpd1.png") 
matplot(data[,1:8], type="l", y-lab="z-score", axes = F) 
axis(side=2) 
dev.off() 

が、私はこのビットを自動化したいと列の値がで変更するPNGに8により各ループとラベルをシフトしています1。 誰かが経路を教えてもらえますか?

+0

ようこそstackoverflow.com [SOツアー](https://stackoverflow.com/tour)にアクセスし、[良い質問](https://stackoverflow.com/help/how-to-ask)の質問方法をお読みください。 。最後に[最小限の、完全で検証可能な例](https://stackoverflow.com/help/mcve)の作成方法を学んでください。 –

+0

ところで、それは 'ylab'ではなく、' y-lab'です –

+0

pdfはオプションではありません: – ipavli

答えて

0

私は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() 
} 
+0

'i:(i + 7)'にする必要があります。 –

+0

@RuiBarradas good eye ... thx –

+0

これは、各PNGを8で変更したという事実を除いては機能しましたが、それに別の変数を作成しました。 ありがとう! – ipavli

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) 
) 
関連する問題