gpt4 book ai didi

r - 热图中 x 轴上的对角线标签方向

转载 作者:行者123 更新时间:2023-12-02 02:47:10 25 4
gpt4 key购买 nike

在 R 中创建热图一直是许多帖子、讨论和迭代的主题。我的主要问题是,将网格 levelplot() 或基本图形 image() 中提供的解决方案的视觉灵 active 与基本的 heatmap() 的轻松聚类相结合是很棘手的)、pheatmap 的 pheatmap() 或 gplots 的 heatmap.2()。这是我想要更改的一个小细节 - x 轴上标签的对角线方向。让我在代码中向您展示我的观点。

#example data
d <- matrix(rnorm(25), 5, 5)
colnames(d) = paste("bip", 1:5, sep = "")
rownames(d) = paste("blob", 1:5, sep = "")

您可以使用levelplot()轻松将方向更改为对角线:

require(lattice)
levelplot(d, scale=list(x=list(rot=45)))

enter image description here

但是应用聚类似乎很痛苦。其他视觉选项(例如在热图单元格周围添加边框)也是如此。

现在,转向实际的 heatmap() 相关函数、聚类和所有基本视觉效果都非常简单 - 几乎不需要调整:

heatmap(d)

enter image description here

这里也是:

require(gplots)
heatmap.2(d, key=F)

enter image description here

最后,我最喜欢的一个:

require(pheatmap)
pheatmap(d)

enter image description here

但所有这些都没有旋转标签的选项pheatmap 手册建议我可以使用 grid.text 来自定义标签。这是多么令人高兴的一件事——尤其是在聚类和更改显示标签的顺序时。除非我在这里遗漏了一些东西......

最后,有一个古老的好image()。我可以旋转标签,一般来说这是最可定制的解决方案,但没有集群选项。

image(1:nrow(d),1:ncol(d), d, axes=F, ylab="", xlab="")
text(1:ncol(d), 0, srt = 45, labels = rownames(d), xpd = TRUE)
axis(1, label=F)
axis(2, 1:nrow(d), colnames(d), las=1)

enter image description here

那么我应该怎么做才能获得理想的快速热图,具有聚类和方向以及良好的视觉特征黑客?我的最佳出价是以某种方式更改 heatmap()pheatmap() ,因为这两个似乎在调整方面最通用。但欢迎任何解决方案。

最佳答案

要修复 pheatmap,您真正想做的就是进入 pheatmap:::draw_colnames 并在其对 grid 的调用中调整一些设置.text()。这是一种方法,使用 assignInNamespace()。 (可能需要额外的调整,但您明白了;):

library(grid)     ## Need to attach (and not just load) grid package
library(pheatmap)

## Your data
d <- matrix(rnorm(25), 5, 5)
colnames(d) = paste("bip", 1:5, sep = "")
rownames(d) = paste("blob", 1:5, sep = "")

## Edit body of pheatmap:::draw_colnames, customizing it to your liking
draw_colnames_45 <- function (coln, ...) {
m = length(coln)
x = (1:m)/m - 1/2/m
grid.text(coln, x = x, y = unit(0.96, "npc"), vjust = .5,
hjust = 1, rot = 45, gp = gpar(...)) ## Was 'hjust=0' and 'rot=270'
}

## For pheatmap_1.0.8 and later:
draw_colnames_45 <- function (coln, gaps, ...) {
coord = pheatmap:::find_coordinates(length(coln), gaps)
x = coord$coord - 0.5 * coord$size
res = textGrob(coln, x = x, y = unit(1, "npc") - unit(3,"bigpts"), vjust = 0.5, hjust = 1, rot = 45, gp = gpar(...))
return(res)}

## 'Overwrite' default draw_colnames with your own version
assignInNamespace(x="draw_colnames", value="draw_colnames_45",
ns=asNamespace("pheatmap"))

## Try it out
pheatmap(d)

enter image description here

关于r - 热图中 x 轴上的对角线标签方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15505607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com