我有一个包含数百行和数十列的矩阵,并希望绘制热图。如果我使用原生R函数:
heatmap(matrix(sample(1:10000),nrow=1000,ncol=10))
我得到一个带有难以辨认的行标题的数字。我假设生成的图像符合当前绘图设备的规格。我想控制行的高度,即使这不能在我当前的设备上显示。只需写入高大的PNG,只需在图像上方/下方添加空白即可:
png( '/looks_the_same_with_whitespace.png', width=500, height=1500)
heatmap(matrix(sample(1:10000),nrow=1000,ncol=10))
dev.off()
有没有一种干净的方法可以做到这一点,或许是通过欺骗R认为我有一个非常高的显示器?来自一个支持良好的库的功能也是一个很好的答案。
答案 0 :(得分:8)
前段时间,我也遇到了同样的问题。来自heatmap.2
包的gplots
函数解决了这个问题。但是,我不太清楚如何看待这么多基因(或者rowlabs)是有益的。但正如你所说的那样你会做这样的事情:关键是改变热图的layout
(参见?heatmap.2,?layout),它在绘图设备上的2x2网格上绘制热图(示例中?布局解释得更好)。之后,您可能需要相应地更改cex
来更改rowlabs
cexRow
。您的情况可能需要稍微使用值来获得所需的结果。
library(gplots)
row.scaled.expr <- matrix(sample(1:10000),nrow=1000,ncol=10)
png( 'heatmap_without_whitespace_smaller_row_lab.png', width=500, height=1500)
heatmap.2(row.scaled.expr, dendrogram ='row',
Colv=FALSE, col=greenred(800),
key=FALSE, keysize=1.0, symkey=FALSE, density.info='none',
trace='none', colsep=1:10,
sepcolor='white', sepwidth=0.05,
scale="none",cexRow=0.2,cexCol=2,
labCol = colnames(row.scaled.expr),
hclustfun=function(c){hclust(c, method='mcquitty')},
lmat=rbind( c(0, 3), c(2,1), c(0,4) ), lhei=c(0.25, 4, 0.25 ),
)
dev.off()