我正在使用 pheatmap
(Documentation)绘制热图。我正以一种相当直接的方式绘制矩阵:
pheatmap(mat, annotation_col=df, labels_col=rld$Infection_Line, fontsize_row=5, fontsize_col=7)
我的情节底部被切断,以至于我无法在底部看到列名。它看起来像这样:
请注意,这不是热图.2。
我在this question和this question尝试了解决方案,以及我通过谷歌和此功能的文档中找到的其他内容。
我尝试使用par()和oma()以及cexRow来增加边距。
margins=(x,y); par(mar=c(1,2,3,4)); par(oma=c(1,2,3,4))
对情节没有影响。
我需要这样做才能在不减少绘图大小的情况下看到这些长列名。我只想在底部向下拉伸边距。
答案 0 :(得分:5)
我想出来了,希望如果有人在将来遇到这个问题会有所帮助。
当您使用pheatmap的labels_col =参数时会发生这种情况。在我的场景中,这是一个使用DESeq2的RNA-seq项目,有一个目标文件识别样本(列),但对于我的列标签,我使用了不同的列,因此标签更容易理解,所以我使用
labels_col=myThing$ThisOtherColumn
另一列,实际上是一个包含字符和数字的字符串,由于某种原因被读作整数向量。所以解决方案就是
as.character(myThing$ThisOtherColumn)
只要您为labels_col指定一个字符向量,它就会自动调整列。
答案 1 :(得分:4)
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)
答案 2 :(得分:0)
我想对rmf's answer进行详细说明。
关键问题是摆弄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