使用 pheatmap 时列标签被裁剪

Column labels cropped when using pheatmap

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

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

我的图表底部被截断了,所以我看不到底部的列名。它看起来像这样:

请注意,这不是 heatmap.2。

我已经尝试了 this question and at this question 中的解决方案,以及我能够通过 google 和此功能的文档找到的其他内容。

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

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

对剧情没有影响。

我需要这样做,这样我就可以看到这些长列名称,而不会减小我的绘图大小。我只想将底部的边距拉长。

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

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

labels_col=myThing$ThisOtherColumn

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

as.character(myThing$ThisOtherColumn)

只要你给labels_col一个字符向量,它就会自动调整列。

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)

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

我想详细说明一下

关键问题是 fiddle 与 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)

# 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)

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