使用 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()
这样的基本图形函数不会产生影响。我发现手动调整参数 cellheight
和 cellwidth
有助于调整页面上热图的整体大小。或者以某种方式调整边距。
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 与 cellwidth
和 cellheight
以及 width
和 height
。前者改变一个单元格占用多少像素,后者改变输出图像的大小。因此,如果您的图剪辑超出了图像的边缘,您可以减小 单元格大小或增加 图像大小。
请注意,这只会影响输出文件,不会影响您在 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
我正在使用 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()
这样的基本图形函数不会产生影响。我发现手动调整参数 cellheight
和 cellwidth
有助于调整页面上热图的整体大小。或者以某种方式调整边距。
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 与 cellwidth
和 cellheight
以及 width
和 height
。前者改变一个单元格占用多少像素,后者改变输出图像的大小。因此,如果您的图剪辑超出了图像的边缘,您可以减小 单元格大小或增加 图像大小。
请注意,这只会影响输出文件,不会影响您在 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