热图R具有广泛的范围

时间:2014-04-04 16:21:37

标签: r math heatmap stat

我正在从这张表中生成热图

X

   .     0       1       2       3       4       5       6       7       8

  0    12820     720     807     879    1051     824     587     732     874
  1      557   38417   41289   44380   57301   42992   30805   41092   45616
  2       62   59575   83247   72433   95751   76113   50002   92921   72773
  3       23   45346  100836   57101   57903   50625   35223   52695   47868
  4        4   14718   40000   13135    5985   13188   19252    8044    7095
  5        0    4459    6828     674     890    5251    4959     399     563
  6        0     216     333     142     115     189     202     128     128
  7        0     188      97      30      57     255      19      51      29
  8        1      20      38      13       7       4      11      44      17
  9        0      11       9       1       0       8      12     102       6
  10    7992    9620   16841   11065    9917    9619    8133    9291    8554

           9      10

  0        6   10804
  1       55   26041
  2       33   45915
  3       17   35198
  4        1   10071
  5        0    2092
  6        0     102
  7        0      29
  8        0       1
  9        1       1
  10     487 1319070

使用此代码

hv <- heatmap.2(x, col=cm.colors(255), scale="none",trace='none', density="none",lmat=rbind( c(0, 3), c(2,1), c(0,4) ), lhei=c(1.5, 4, 2 ),Rowv = FALSE, Colv = FALSE,dendrogram = "none",margins=c(5,5),xlab="ICOADS ship speed indicator",ylab="ICOADS course indicator")

我制作了这个情节

enter image description here

这不是很有用。无论如何,如果我不想把scale =“row”或scale =“column”,因为很难解释结果。有没有办法使用scale =“none”并看到不同的颜色范围?

由于

1 个答案:

答案 0 :(得分:2)

嗯,这是使用ggplot的一种方式。

library(reshape2)       # for melt
library(RColorBrewer)   # for brewer.pal(...)
library(ggplot2)

x  <- cbind(id=as.numeric(rownames(x)),x)
gg <- melt(x,id="id")
gg$variable <- as.numeric(substr(gg$variable,2,4))
brks   <- c(0,10^rep(0:7))
gg$bin <- cut(gg$value,breaks=brks,labels=0:7,include.lowest=T)

ggplot(gg) + 
  geom_tile(aes(x=factor(id),y=factor(10-variable),fill=bin))+
  scale_fill_manual(name="",labels=brks,values=rev(brewer.pal(8,"Spectral")))+
  scale_y_discrete(labels=10:0)+
  labs(x="",y="")+
  theme_bw()+theme(panel.border=element_blank())

基本思想是使用颜色的对数标度。这对你来说有点问题,因为你有零。因此,使用cut(...)函数进行变通处理。 bin break设置为0,1,10,100,...,1e7。

您的数据采用“宽”格式:不同列中的“y”值不同,而ggplot需要“长”格式的数据:一列中的所有数据都带有x值和y-单独列中的值。我们使用melt(...)函数将宽转换为长。其余的代码设置了垃圾箱和标签,并格式化图表,使其看起来尽可能接近您的管理。