gpt4 book ai didi

R 如何在 heatmap.2 中的列上方构建有角度的列标题 : pass (text) plot to the layout?

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

我非常接近我想要的热图,但几天来我一直在努力找出标题问题。我希望每列的顶部都有有角度的标题(例如 45 或 50 度)。我已经抑制了树状图(对于列和行),并使用矩阵的第一列(深度)作为行的标签。

从我对这个问题的多次搜索中,我发现 mtext 对我没有帮助,因为文本无法在 mtext 中旋转。然后我想我可以用文本来做到这一点,但是列标签被覆盖到热图本身上;当单词到达热图布局空间的边缘时,它们“消失”(被覆盖)。因此,我检查了热图使用的布局(非常感谢@Ian Sudbery),我突然意识到我真正需要的是布局中用于放置列标题的专用空间。我可以使用布局函数分配该空间,并且我在下面的代码中这样做了。但我认为下一步可能涉及进入 heatmap.2 代码。 Heatmap.2 调用了四个图(其中两个我已隐藏,即树状图)。我如何将其称为第五个情节?如果可能的话,我如何告诉它我想使用文本作为我的第五个“图”,其中文本是我的列标题,旋转 50 度?

非常感谢您的任何想法。请原谅我在下面的代码中提供示例数据的笨拙方式;我是 R 新手,通常不知道做大多数事情的最优雅的方式。

par(oma=c(0.5,0.5,.5,0.5))  # outer margins of whole figure

lmat = rbind(c(3,5,5),c(2,1,1),c(0,4,0))
lwid = c(.08,.9, .1)
lhei = c(1,4,1.5)

Depth<-c("0m","20m","40m","60m","80m","100m")
Sept2008<-c(3,6,8,10,15,16)
March2010<-c(10,12,11,13,12,11)
Sept2010<-c(5,6,NA,8,11,13)
March2011<-c(4,6,10,NA,14,14)
Sept2011<-c(2,5,3,9,16,12)

heatmap_frame=data.frame(Depth=Depth,Sept2008=Sept2008,March2010=March2010,Sept2010=Sept2010, March2011=March2011, Sept2011=Sept2011)
row.names(heatmap_frame)<-heatmap_frame$Depth
heatmap_frame<-heatmap_frame[,-1]
heatmap_matrix <- as.matrix(heatmap_frame)

labCol=c("Sept 2008","March 2010","Sept 2010","March 2011","Sept 2011")
cexCol=1.1

heatmap <- heatmap.2(heatmap_matrix, dendrogram="none", trace="none",Rowv=NA, Colv=NA,
col = brewer.pal(9,"Blues"), scale="none", margins=c(2,5),labCol="",
lmat=lmat, lwid=lwid,lhei=lhei, density.info="none",key=TRUE)

# want to plot a fifth area, to use for col labels
# don't know how to pass a text line to the heatmap.2/layout/matrix to print as my fifth plot

mtext("Use for main title", side=3,outer=F,line=2.75, font=2, cex=1.25)

# testing the text function; did not work as desired
#text(x=1, y=1, labels="Label_1",xpd=T)
text(x=c(0,.2,.4,.6,.8), y=0.95, pos=3, srt=50, labels=labCol,xpd=T, cex=1)

最佳答案

这是一个不涉及分解 heatmap.2 复杂代码的 hack:

  pos2 <- locator() #will return plotting coordinates after doing this:
# Shift focus to the graphics window by clicking on an edge
# Left-Click once where you want the first label to be centered
# Left-click again on the point where you want the last label centered
# Right-Click, then return focus to the console session window

pos2 <- structure(list(x = c(0.27149971320082, 0.858971646016485),
y = c(0.861365598392473, 0.857450478257082)),
.Names = c("x", "y"))

text(x=seq(pos2$x[1], pos2$x[2], len=5), y=rep(pos2$y[1],5) ,
srt=50, xpd=TRUE, adj = 0,
labels=c("Sept 2008","March 2010","Sept 2010",
"March 2011","Sept 2011") )

我不知道您是否真的需要其中的 xpd,因为在 heatmap.2 完成后,它会将窗口返回到其 native 坐标: [0,1]x[0,1]

enter image description here

关于R 如何在 heatmap.2 中的列上方构建有角度的列标题 : pass (text) plot to the layout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29889121/

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