2

R でヒートマップを作成しようとしています。heatmap.2 コマンドを使用してみました。

私のデータは、x 列と y 列、および関連するポイントの相対頻度 (頻度を合計頻度で割った値) で構成されます。

ほとんどの場所で周波数がゼロで、他の場所では相対周波数が小さい。これはヒートマップコマンドが望んでいるように見え、x座標とy座標を削除しようとしたため、データをマトリックスに変換しました。

BB <- matrix(as.matrix(surfacerevfreq1[, 3]),  ncol = 35, byrow = T)

すべての x 座標と y 座標がリストされているわけではありません。つまり、x 座標は 1 から始まり 35 になりますが、y 座標は 11 から始まり 30 になります。ヒートマップ関数はこれを好まないようです。y 軸の 1 から 10 までの各ポイントが値を持つように、データ セットの先頭にゼロを挿入することを考えました。ただし、これが最善のアイデアかどうかはわかりません。

だから私の質問は次のとおりだと思います:このデータから有効なヒートマップを作成できるようにデータをフォーマットするにはどうすればよいですか? 可能であれば、x スケールと y スケールの数値も表示したいことを付け加えておきます。目的は、各ポイントに関連付けられた相対頻度をグラフィカルに表示することです。

ありがとう。

これは私のデータのサブセットで、マトリックス形式でどのように見えるかを確認できます

    col1         col2         col3         col4         col5         col6            col7         col8         col9        col10        col11        col12 
0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000    0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 
   col13        col14        col15        col16        col17         col18            col19        col20        col21        col22        col23        col24 
0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000  0.0000000000 0.0000000000 0.0000000000 0.0005017561 0.0005017561 0.0000000000 
   col25        col26        col27        col28        col29            col30            col31        col32        col33        col34        col35 
0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000      0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 

ここに私が使用しているヒートマップコマンドがあります:

hU <- heatmap.2(xx, Rowv=FALSE, symm=TRUE,  trace="none", density.info="none",   dendrogram="none")
4

2 に答える 2

1

3列のデータがdata [x、y、q]に保存されていることを考慮して、これを試してください

a = matrix(0, nrow = 30 - 10, ncol = 35)
rownames(a) = 11:30
apply(data, 1, function(x) a[x[2] - 10, x[1]] <<- x[3])
heatmap.2(a, Rowv=FALSE, symm=TRUE,  trace="none", density.info="none", 
          dendrogram="none", xlab="X", ylab="Y")
于 2012-10-04T21:51:07.370 に答える
0

ggplot2 を使用してみてください。より優れたヒートマップが生成されます

例:

data <- read.csv("data.txt", header=T, sep=",")
attach(data)
data.m = melt(data) 
data.m <- ddply(data.m, .(variable), transform, rescale = rescale(value))
require(ggplot2)
p <- ggplot(data.m, aes(variableX, variableY)) + geom_tile(aes(fill = rescale), 
  colour =   "white") + scale_fill_gradient(low = "red", high = "green")
于 2012-10-04T18:58:55.500 に答える