在R image()函数中调整行高

时间:2013-01-03 16:25:27

标签: image r heatmap

我正在使用R中的image()函数绘制几个热图。 热图的大小变化很大,因此每个热图都有不同的高度,但我希望行热高度在热图上是均匀的。 所以我从这两个矩阵创建了热图,每个单元格的高度在两个热图之间是不同的:

m1<-replicate(40, rnorm(20))     
image(1:ncol(m1), 1:nrow(m1), t(m1), axes = FALSE,xlab="",ylab="")


m2<-replicate(40, rnorm(10))
image(1:ncol(m2), 1:nrow(m2), t(m2), axes = FALSE,xlab="",ylab="")

对于我的生活,我无法弄清楚如何指定行高。它必须是一个非常简单的解决方案,但我无法弄清楚。

3 个答案:

答案 0 :(得分:0)

您提供的信息非常有限。例如,您想要创建PDF吗?或者在一个页面上放置几个图?

这是一个解决方案:

par(fin=c(5,5),mar=c(0,0,0,0))
image(1:ncol(m1), 1:nrow(m1), t(m1), axes = FALSE,xlab="",ylab="")

par(fin=c(5,2.5),mar=c(0,0,0,0))
image(1:ncol(m2), 1:nrow(m2), t(m2), axes = FALSE,xlab="",ylab="") 

我确信有更多优雅的解决方案,具体取决于您对图表的实际需求。

答案 1 :(得分:0)

使用ylim参数设置所有热图的公共最大行数:

m1<-replicate(40, rnorm(20))     
m2<-replicate(40, rnorm(10))

image(1:ncol(m1), 1:nrow(m1), t(m1), axes=FALSE, ann=FALSE, ylim=c(0, max(sapply(list(m1,m2),nrow)) ))
image(1:ncol(m2), 1:nrow(m2), t(m2), axes=FALSE, ann=FALSE, ylim=c(0, max(sapply(list(m1,m2),nrow)) ))

答案 2 :(得分:0)

您可能需要手动指定ylim参数,并且两个图之间的参数相同:

par(mfrow=c(1,2))

image( 0:ncol(m1), 0:nrow(m1), t(m1), axes=FALSE, xlab='', ylab='', 
        ylim=c(0,nrow(m1)) )
image( 0:ncol(m2), 0:nrow(m2), t(m2), axes=FALSE, xlab='', ylab='',
        ylim=c(0,nrow(m1)) )