R热图:按值排序;标签问题

时间:2013-03-29 22:09:49

标签: r ggplot2 heatmap

我希望根据Jeromy的回答here改进我在R中实现的输出(谢谢!)。我的是31x31矩阵,具有正值和负值,并使用基本相同的ggplot2代码:

library(ggplot2)
library(reshape)

z<-cor(insheet3,use="complete.obs",method="kendall")
zm<-melt(z)
ggplot(zm, aes(X1,X2, fill=value)) +  geom_tile() +
scale_fill_gradient2(low = "blue",  high = "dark violet")  

我需要改变三件事:

  1. 现在,行以反向字母顺序显示,这意味着没有可见的数据趋势。 如何影响行和列的顺序,例如:

    一个。 (首选:)列是按相关值排序(从负到正,反之亦然),因为它们位于同一页面上的椭圆包输出中;或

    B中。列是手动排序,以便我可以对类似的变量进行分组?

  2. 沿着底部的X轴,我的变量名称显着重叠并且不可读。它们需要保持很长时间(即OrthoPhos,Ammonia,Residential ......),所以如何将标签旋转90度

  3. 有没有办法沿每个轴删除“X1”和“X2”标签

  4. 谢谢!

2 个答案:

答案 0 :(得分:1)

按照我所谓的广泛/宗教R之旅进入相关矩阵的可能性,我想分享我最终要使用的东西。此外,感谢以前的回答者;我发现有很多“正确”的答案。

由于我的评论家坚持要求我包含数字而不仅仅是颜色,并且我远离更多“混乱”和“忙”输出(如相关图),我终于找到了“图像”并将我的最终输出基于this example 。谢谢@Marcinthebox。

还要安抚StackOverflow,here is a link to the image,而不是图像本身。

因为其中一些规范需要一段时间来弄清楚并且对最终输出至关重要,所以这是我的代码,尽可能缩短。

#Subsetting to only the vectors I want to see in the correlation, as ordered
insheet<-subset(insheet1,
    select=c("Cond", "CL", "SO4", "TN", "TP", "OrthoPhos", "DO", ...., "Rural"))

#Defining "high" and "low" colors
library(colorspace)
mycolors<-diverge_hcl(8,  h = c(8, 240), c = 80, l = c(50,100), power = 1)

#Correlating them into a matrix
sheet<-cor(insheet,use="complete.obs")

#Making it!
image(x=seq(dim(sheet)[2]), y=seq(dim(sheet)[2]), z=sheet, ann=FALSE, 
    col=mycolors,  xlab="x column", ylab="y column", xaxt='n', yaxt='n')
text(expand.grid(x=seq(dim(sheet)[2]), y=seq(dim(sheet)[2])),
    labels=round(c(sheet),2), cex=0.5)
axis(1, 1:dim(insheet2)[2], colnames(insheet2), las=2)
axis(2, 1:dim(insheet2)[2], colnames(insheet2), las=2)
par(mar=c(5.5, 5.5, 2, 1)) #Moves margins over to allow for axis labels

一旦错误被抑制,我还能够循环使用它来输出多个.wmf文件。太糟糕了,我无法想象出重要的p值......另一次。谢谢!

答案 1 :(得分:0)

我认为你的意思是指1点的“聚类”? 对于此类任务,我更喜欢heatmap.2()包中的gplots函数,该函数提供了各种聚类选项。

对于第2点和第3点:heatmap.2()函数还将处理90º旋转和标签,因为它使用数据矩阵作为输入而不是数据表。