1

次の形式の入力ファイルがあります。

 0.35217720               1         201           1
 0.26413283               1         209           1
 1.1665874                1         210           1
 ...
 0.30815500               2         194           1
 0.15407741               2         196           1
 0.15407741               2         197           1
 0.33016610               2         205           1
 ...

ここで、最初の列はスカラー値、2 番目は離散格子の x 座標、3 番目は y 座標、最後の列は時間のような離散成分です。特定の時間にスカラー値の 2 次元ヒートマップを作成したいと考えています。どのようにできるのか?編集: image() を使用して 2 番目と 3 番目の列を x、y 座標として使用する方法がわかりません。

サンプルファイル:

  7.62939453              1           1           1
  1.3153768               1           2           1
  7.5560522               1           3           1
  4.5865011               1           4           1
  5.3276706               1           5           1
  2.1895909               2           1           1
  0.47044516              2           2           1
  6.7886448               2           3           1
  6.7929626               2           4           1
  9.3469286               2           5           1
  3.8350201               3           1           1
  5.1941633               3           2           1
  8.3096523               3           3           1
  0.34571886              3           4           1
  0.53461552              3           5           1
  5.2970004               4           1           1
  6.7114925               4           2           1
  7.69805908              4           3           1
  3.8341546               4           4           1
  0.66842079              4           5           1
  4.1748595               5           1           1
  6.8677258               5           2           1
  5.8897662               5           3           1
  9.3043633               5           4           1
  8.4616680               5           5           1
4

2 に答える 2

2

データを行列に再形成してから、heatmap() を使用します。

これは R バージョン 2.10.1 (2009-12-14) で機能しました。

txt <- textConnection("7.62939453              1           1           1
  1.3153768               1           2           1
  7.5560522               1           3           1
  4.5865011               1           4           1
  5.3276706               1           5           1
  2.1895909               2           1           1
  0.47044516              2           2           1
  6.7886448               2           3           1
  6.7929626               2           4           1
  9.3469286               2           5           1
  3.8350201               3           1           1
  5.1941633               3           2           1
  8.3096523               3           3           1
  0.34571886              3           4           1
  0.53461552              3           5           1
  5.2970004               4           1           1
  6.7114925               4           2           1
  7.69805908              4           3           1
  3.8341546               4           4           1
  0.66842079              4           5           1
  4.1748595               5           1           1
  6.8677258               5           2           1
  5.8897662               5           3           1
  9.3043633               5           4           1
  8.4616680               5           5           1
")
df <- read.table(txt)
close(txt)

names(df) <- c("value", "x", "y", "t")

require(reshape)
dfc <- cast(df[ ,-4], x ~ y)
heatmap(as.matrix(dfc))
于 2012-07-31T20:03:24.853 に答える
1
## Some copy/pasteable fake data for you (dput() works nicely for pasteable real data)
your_matrix <- cbind(runif(25, 0, 10), rep(1:5, each = 5), rep(1:5, 5), rep(1, 25))

heatmap_matrix <- matrix(your_matrix[, 1], nrow = 5)
## alternatively, if your_matrix isn't in order
## (The reshape method in EDi's answer is a nicer alternative)
for (i in 1:nrow(your_matrix)) {
    heatmap_matrix[your_matrix[i, 2], you_matrix[i, 3]]
}

heatmap(heatmap_matrix) # one option
image(z = heatmap_matrix) # another option
require(gplots)
heatmap.2(heatmap_matrix) # this has fancier preferences
于 2012-07-31T20:09:51.520 に答える