我非常接近我想要的热图,但我一直在努力解决标题问题。我想要在每列的顶部有角度的标题(例如 45 或 50 度)。我已经抑制了树状图(对于列和行),并使用矩阵的第一列(深度)作为行的标签。
从我对这个问题的许多搜索中,我发现 mtext 对我没有帮助,因为文本不能在 mtext 中旋转。然后我想我可以用文本来做,但是列标签会被覆盖到热图本身上;当文字到达热图布局空间的边缘时,它们“消失”(被覆盖)。所以我检查了热图使用的布局(非常感谢@Ian Sudbery),我突然想到我真正需要的是在布局中为我的列标题留出一个专用空间。我可以使用布局函数分配该空间,我已经在下面的代码中这样做了。但我认为下一步可能涉及进入 heatmap.2 代码。Heatmap.2 调用了四个图(其中两个我已经抑制,树状图)。我如何让它称为第五个情节?如果可以的话,
非常感谢您的任何想法。请原谅我在下面的代码中提供示例数据的笨拙方式;我是 R 新手,通常不知道做大多数事情的最优雅的方式。
par(oma=c(0.5,0.5,.5,0.5)) # outer margins of whole figure
lmat = rbind(c(3,5,5),c(2,1,1),c(0,4,0))
lwid = c(.08,.9, .1)
lhei = c(1,4,1.5)
Depth<-c("0m","20m","40m","60m","80m","100m")
Sept2008<-c(3,6,8,10,15,16)
March2010<-c(10,12,11,13,12,11)
Sept2010<-c(5,6,NA,8,11,13)
March2011<-c(4,6,10,NA,14,14)
Sept2011<-c(2,5,3,9,16,12)
heatmap_frame=data.frame(Depth=Depth,Sept2008=Sept2008,March2010=March2010,Sept2010=Sept2010, March2011=March2011, Sept2011=Sept2011)
row.names(heatmap_frame)<-heatmap_frame$Depth
heatmap_frame<-heatmap_frame[,-1]
heatmap_matrix <- as.matrix(heatmap_frame)
labCol=c("Sept 2008","March 2010","Sept 2010","March 2011","Sept 2011")
cexCol=1.1
heatmap <- heatmap.2(heatmap_matrix, dendrogram="none", trace="none",Rowv=NA, Colv=NA,
col = brewer.pal(9,"Blues"), scale="none", margins=c(2,5),labCol="",
lmat=lmat, lwid=lwid,lhei=lhei, density.info="none",key=TRUE)
# want to plot a fifth area, to use for col labels
# don't know how to pass a text line to the heatmap.2/layout/matrix to print as my fifth plot
mtext("Use for main title", side=3,outer=F,line=2.75, font=2, cex=1.25)
# testing the text function; did not work as desired
#text(x=1, y=1, labels="Label_1",xpd=T)
text(x=c(0,.2,.4,.6,.8), y=0.95, pos=3, srt=50, labels=labCol,xpd=T, cex=1)