web-dev-qa-db-ja.com

値を含む行列をヒートマップとして表示する

私がしたいことは、このマトリックスを取ることです:

> partb
                0.5  1.5   1a   1b   -2   -3
A1FCLYRBAB430F 0.26 0.00 0.74 0.00 0.00 0.00
A1SO604B523Q68 0.67 0.33 0.00 0.00 0.00 0.00
A386SQL39RBV7G 0.00 0.33 0.33 0.33 0.00 0.00
A3GTXOXRSE74WD 0.41 0.00 0.08 0.03 0.05 0.44
A3OOD9IMOHPPFQ 0.00 0.00 0.33 0.00 0.33 0.33
A8AZ39QM2A9SO  0.13 0.54 0.18 0.13 0.00 0.03

そして、色付けされたセルの各値を持つヒートマップを作成します。

ヒートマップの作成は簡単です。

> heatmap( partb, Rowv=NA, Colv=NA, col = heat.colors(256),  margins=c(5,10))

しかし、私の人生では、各セルに値をどのように配置するかわかりません。

何が欠けていますか?確かにこれは一般的なことです。

30

gplots パッケージのheatmap.2を試してください。 cellnoteおよびnotecolパラメータは、セルに配置されるテキストを制御します。おそらくdendrogram = "none"も必要になるでしょう。

13
Connor M

例えば:

m <- matrix(1:30, ncol=6)
colnames(m) <- paste("C", 1:6, sep="")
rownames(m) <- paste("R", 1:5, sep="")
m

image(1:ncol(m), 1:nrow(m), t(m), col = terrain.colors(60), axes = FALSE)
axis(1, 1:ncol(m), colnames(m))
axis(2, 1:nrow(m), rownames(m))
for (x in 1:ncol(m))
  for (y in 1:nrow(m))
    text(x, y, m[y,x])
17
lcgong

imageおよびtextを使用できます。個人的にimage.plotfieldsパッケージにあります。これは、サイドに凡例を追加するためですが、imageでも使用できます。

だから例えば

require(fields)
# Make a 10x10 matrix
m = matrix(rnorm(100), nrow=10)
image.plot(m)
for (x in 1:10)
    for (y in 1:10)
        text((x-1)/9, (y-1)/9, sprintf("%0.2f", m[x,y]))
4
nico

latticeパッケージのlevelplot()は、色の凡例を提供します。まさにあなたが望むものではなく、考えること。

3
Maiasaura

値を使用してヒートマップを作成する別の簡単な方法があります。 pheatmap を使用してこれを行うことができます。

dat <- matrix(rnorm(100, 3, 1), ncol=10)
names(dat) <- paste("X", 1:10)
install.packages('pheatmap') # if not installed already
library(pheatmap)
pheatmap(dat, display_numbers = T)

これはあなたにこのようなプロットを与えます

Heatmap with values

1
Biginer

Lcgong(残念ながら私は直接コメントを投稿できます)に続いて、純粋な転置によって色表現に問題が発生しました。したがって、私はマトリックスを再び回転させ、それはうまくいきました。次のように関数を見つけることができます。選択したヒートマップのカラースケールが3〜11のnで機能することを確認してください。必要に応じて、ここで別のヒートマップを選択できます。

heatmap <- function(data, rowN, colN, xTitle = "", yTitle = "", numColors)
{
    # transpose and rotate matrix clockswise 90 degrees 
    dataAdjusted <- t(apply(data,2,rev))

    image(1:ncol(data), 1:nrow(data), xlab = xTitle, ylab = yTitle, dataAdjusted, col = rev(brewer.pal(numColors,"RdYlBu")), axes = FALSE)
    axis(1, 1:ncol(data), colN)
    axis(2, 1:nrow(data), rowN)

    for (x in 1:ncol(data))
        for (y in 1:nrow(data))
            # add text values into matrix based on transposed/rotated indices + round values to two digits
            text(x, y, round(dataAdjusted[x,y],2))
}

# required lib
library(RColorBrewer)

# Make a 8x8 matrix
m = matrix(rnorm(64), nrow=8)

# row names
rowN <- c("row 01", "row 02", "row 03", "row 04", "row 05", "row 06", "row 07", "row 08");
# column names
colN <- c("col 01", "col 02", "col 03", "col 04", "col 05", "col 06", "col 07", "col 08");

# without axis titles    
heatmap(m, rowN, colN, numColors = 10)

# alternatively with titles
heatmap(m, rowN, colN, xTitle = "xTest", yTitle = "yTest", numColors = 10)
0
Mathias S.