【问题标题】:Column labels cropped when using pheatmap使用 pheatmap 时裁剪的列标签
【发布时间】:2017-06-22 13:43:41
【问题描述】:

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

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

我的情节底部被切断了,所以我看不到底部的列名。它看起来像这样:

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

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

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

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

对情节没有影响。

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

【问题讨论】:

  • 可重现的示例。我们应该能够重现您的错误/问题以帮助您。阅读我在另一个问题中提供的链接。
  • 为什么在使用 pheatmap 时链接到有关 heatmap.2 的帖子?尤其是当您在帖子中强调这一点时。
  • @emilliman5 因为他之前的问题被标记为重复。附言downvoters,不要在没有任何评论的情况下投反对票。
  • @emilliman 是的,正如马苏德所说。其他帖子的人一直说已经有答案并链接到 heatmap.2 问题。所以我在这里指定,这样就不会再发生了。我以为我在标题中已经说得很清楚了,但显然不是。无论如何,我发现了这个问题并将其发布在下面,希望如果我在几年内遇到这个问题,我会看到这篇文章。你好未来的我!

标签: r plot pheatmap


【解决方案1】:

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

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

labels_col=myThing$ThisOtherColumn

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

as.character(myThing$ThisOtherColumn)

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

【讨论】:

  • 这非常有用,谢谢。我认为它被解释为整数的原因是myThing$ThisOtherColumn 可能被编码为一个因子,R 在内部将其存储为整数。反正我就是这样。也许你可以编辑你的答案来解释这一点。
【解决方案2】:

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)

【讨论】:

  • 一个相关的修复方法是将treeheight_rowtreeheight_col 调整为较低的值。
【解决方案3】:

我想详细说明一下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)

# 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2013-05-14
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 2020-12-21
    相关资源
    最近更新 更多