使用pheatmap

时间:2017-06-22 13:43:41

标签: r plot pheatmap

我正在使用 pheatmap Documentation)绘制热图。我正以一种相当直接的方式绘制矩阵:

pheatmap(mat, annotation_col=df, labels_col=rld$Infection_Line, fontsize_row=5, fontsize_col=7) 

我的情节底部被切断,以至于我无法在底部看到列名。它看起来像这样:

enter image description here

请注意,这不是热图.2。

我在this questionthis question尝试了解决方案,以及我通过谷歌和此功能的文档中找到的其他内容。

我尝试使用par()和oma()以及cexRow来增加边距。

margins=(x,y); par(mar=c(1,2,3,4)); par(oma=c(1,2,3,4))  

对情节没有影响。

我需要这样做才能在不减少绘图大小的情况下看到这些长列名。我只想在底部向下拉伸边距。

3 个答案:

答案 0 :(得分:5)

我想出来了,希望如果有人在将来遇到这个问题会有所帮助。

当您使用pheatmap的labels_col =参数时会发生这种情况。在我的场景中,这是一个使用DESeq2的RNA-seq项目,有一个目标文件识别样本(列),但对于我的列标签,我使用了不同的列,因此标签更容易理解,所以我使用

labels_col=myThing$ThisOtherColumn

另一列,实际上是一个包含字符和数字的字符串,由于某种原因被读作整数向量。所以解决方案就是

as.character(myThing$ThisOtherColumn)

只要您为labels_col指定一个字符向量,它就会自动调整列。

答案 1 :(得分:4)

pheatmap使用网格图形,因此像par()这样的基本图形函数不起作用。我发现手动调整参数cellheightcellwidth有助于调整页面上热图的整体大小。或以某种方式调整保证金。

library(pheatmap)
dfr <- as.data.frame(t(data.frame(x=runif(10),y=runif(10),z=runif(10))))
md <- data.frame(cat1=sample(x=letters[1:4],10,replace=T),cat2=sample(x=letters[6:7],10,replace=T))
rownames(md) <- colnames(dfr)
pheatmap(dist(as.data.frame(t(dfr))),annotation_col=md,annotation_row=md)

enter image description here

pheatmap(dist(as.data.frame(t(dfr))),annotation_col=md,annotation_row=md,
         cellheight=15,cellwidth=15)

enter image description here

答案 2 :(得分:0)

我想对rmf's answer进行详细说明。

关键问题是摆弄cellwidthcellheight以及widthheight。前者改变一个像元占用多少像素,后者改变输出图像的大小。因此,如果您的绘图超出了图像的边缘,则可以减小像元大小或增大图像的大小。

请注意,这只会影响输出文件,而不影响运行R时看到的R绘图区域。

示例:

library(pheatmap)
set.seed(1)
data <- as.data.frame(matrix(rnorm(600), ncol=20))
rownames(data) <- paste(rownames(data), "looooong text")

然后...

# Doesn't fit on image
pheatmap(data, filename = "/tmp/example_1.png",
         cellwidth = 20, cellheight = 20,
         width = 7, height=9.1)

too large

# Change cell sizes, keep width/height fixed
pheatmap(data, filename = "/tmp/example_2.png",
         cellwidth = 10, cellheight = 10, # <--- changed here
         width = 7, height=9.1)

small cells

# Change width/height, keep cell sizes fixed
pheatmap(data, filename = "/tmp/example_3.png",
         cellwidth = 20, cellheight = 20,
         width = 9, height=10)   # <--- changed here

big plotting area