9

サイトとパッケージ全体でヒートマップに関する多くの質問を検索しましたが、まだ問題があります。
クラスター化されたデータ (kmeans/EM/DBscan ..) があり、同じクラスターをグループ化してヒートマップを作成したいと考えています。似たような色のパターンをヒートマップにまとめたいので、一般的にはブロック対角線のように見えます。
データをクラスタ番号順に並べて表示してみましたが、

k = kmeans(data, 3)
d = data.frame(data)
d = data.frame(d, k$cluster)
d = d[order(d$k.cluster),]
heatmap(as.matrix(d))
しかし、それはまだソートされておらず、次のリンクのように見えます:ここに画像の説明を入力
しかし、クラスター番号でソートし、次のようにしたい: ここに画像の説明を入力
R でこれを行うことはできますか?
多くのパッケージを検索し、多くの方法を試しましたが、まだ問題があります。
どうもありがとう。

4

2 に答える 2

8

次のようにreshape2andを使用してこれを行うことができます。ggplot2

library(reshape2)
library(ggplot2)

# Create dummy data
set.seed(123)
df <- data.frame(
        a = sample(1:5, 1000, replace=TRUE),
        b = sample(1:5, 1000, replace=TRUE),
        c = sample(1:5, 1000, replace=TRUE)
)

# Perform clustering
k <- kmeans(df, 3)

# Append id and cluster
dfc <- cbind(df, id=seq(nrow(df)), cluster=k$cluster)

# Add idsort, the id number ordered by cluster 
dfc$idsort <- dfc$id[order(dfc$cluster)]
dfc$idsort <- order(dfc$idsort)

# use reshape2::melt to create data.frame in long format
dfm <- melt(dfc, id.vars=c("id", "idsort"))

ggplot(dfm, aes(x=variable, y=idsort)) + geom_tile(aes(fill=value))

ここに画像の説明を入力

于 2011-04-16T17:18:29.657 に答える
2

デンドログラムとそれに続く順序付けが必要ない場合はRowv、 とColvを設定する必要があります。NAところで、スケーリングも行う必要があります。Andrie の df を使用:

heatmap(as.matrix(df)[order(k$cluster),],Rowv=NA,Colv=NA,scale="none",labRow=NA)

ここに画像の説明を入力

実際、このヒートマップ全体はimage(). を使用imageして、必要に応じて正確にプロットを作成することができます。Heatmap は内部で layout() を使用しているため、余白を設定するのは困難です。画像を使用すると、たとえば次のことができます。

myHeatmap <- function(x,ord,xlab="",ylab="",main="My Heatmap",
                      col=heat.colors(5), ...){
    op <- par(mar=c(3,0,2,0)+0.1)
    on.exit(par(op))
    nc <- NCOL(x)
    nr <- NROW(x)
    labCol <- names(x)

    x <- t(x[ord,])
    image(1L:nc, 1L:nr, x, xlim = 0.5 + c(0, nc), ylim = 0.5 +
        c(0, nr), axes = FALSE, xlab=xlab, ylab=ylab, main=main,
        col=col,...)

    axis(1, 1L:nc, labels = labCol, las = 2, line = -0.5, tick = 0)
    axis(2, 1L:nr, labels = NA, las = 2, line = -0.5, tick = 0)
}

library(RColorBrewer)
myHeatmap(df,order(k$cluster),col=brewer.pal(5,"BuGn"))

余白の少ないプロットを作成する。軸、色などを操作することもできます...RColorBrewerパッケージを確認する必要があります

(このカスタム関数は、ヒートマップで使用される内部プロットに基づいており、図のために単純化され、すべての樹形図を取り除くために簡略化されています)

ここに画像の説明を入力

于 2011-04-17T15:22:26.660 に答える