17

約50人の個人ごとに3つの要素(set1、set2、およびset3)があります。set1、set2、およびset3の値は、「A」、「B」、「C」です。これらのデータのヒートマップのようなプロットを作成したいのですが、凡例に値に関連付けられた色を表示させます(たとえば、A ='赤'、B ='青'、C ='黒')。助言がありますか?

ありがとう。

4

2 に答える 2

26

私はggplot2でこれにアプローチするのが簡単だと決めました(とにかく私にとって):

#recreate a data set
dat <- data.frame(person=factor(paste0("id#", 1:50), 
    levels =rev(paste0("id#", 1:50))), matrix(sample(LETTERS[1:3], 150, T), ncol = 3))

library(ggplot2); library(reshape2)
dat3 <- melt(dat, id.var = 'person')
ggplot(dat3, aes(variable, person)) + geom_tile(aes(fill = value),
   colour = "white") + scale_fill_manual(values=c("red", "blue", "black"))

ここに画像の説明を入力

于 2012-10-21T13:54:08.600 に答える
3

同様のプロットは、ベース グラフィックスでも作成できます。baseimage関数を使用した方法の 1 つを次に示します。このサンプルには、数値ではなくカテゴリの応答があります。

dx <- data.frame( Tasks = c('1','2','3','4'),
                  Phase1 = c('Done','Done','Done','WIP'),
                  Phase2 = c('WIP','Done','Done',''),
                  Phase3 = c('','WIP','Done',''))

ff<-factor(as.matrix(dx[,2:4]), 
    levels=c("Done","WIP",""), 
    labels=c("done","wip","-empty-")
)
fx<-matrix(as.numeric(ff), ncol=ncol(dx)-1)

#use labels to assign colors
col<-c(done="darkgreen",wip="orange","-empty-"="black")

imgflip<-function(x) {t(x[nrow(x):1,])}

image(imgflip(fx),
    breaks=(1:(nlevels(ff)+1))-.5,
    col=col[levels(ff)],
    xaxt="n", yaxt="n"
)
axis(2, at=seq(0,1,length.out=nrow(dx)), labels=rev(paste("Task",dx$Tasks)), las=2)
axis(3, at=seq(0,1,length.out=length(names(dx))-1), labels=names(dx)[-1])

この画像を生成します。

サンプル画像

于 2014-05-09T05:22:52.107 に答える