我正在从这张表中生成热图
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")
我制作了这个情节
这不是很有用。无论如何,如果我不想把scale =“row”或scale =“column”,因为很难解释结果。有没有办法使用scale =“none”并看到不同的颜色范围?
由于
答案 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(...)
函数将宽转换为长。其余的代码设置了垃圾箱和标签,并格式化图表,使其看起来尽可能接近您的管理。