【问题标题】:Trying to determine why my heatmap made using heatmap.2 and using breaks in R is not symmetrical试图确定为什么我的热图使用 heatmap.2 并在 R 中使用中断是不对称的
【发布时间】:2012-09-20 17:35:32
【问题描述】:

我正在尝试对蛋白质 dna 相互作用数据集进行聚类,并使用 R 包 gplots 中的 heatmap.2 绘制热图。我的矩阵是对称的。
这是我通过 pearson 运行后使用的数据集的副本:DataSet

这是我生成这些图的完整过程:在我的案例 pearson 中使用一些相关性生成距离矩阵,然后将该矩阵传递给 R 并在其上运行以下代码:

library(RColorBrewer);
library(gplots);
library(MASS);
args <- commandArgs(TRUE);
matrix_a <- read.table(args[1], sep='\t', header=T, row.names=1);
mtscaled <- as.matrix(scale(matrix_a))
# location <- args[2];
# setwd(args[2]);
pdf("result.pdf", pointsize = 15, width = 18, height = 18)
mycol <- c("blue","white","red")
my.breaks <- c(seq(-5, -.6, length.out=6),seq(-.5999999, .1, length.out=4),seq(.100009,5, length.out=7))
#colors <- colorpanel(75,"midnightblue","mediumseagreen","yellow") 
result <- heatmap.2(mtscaled, Rowv=T, scale='none', dendrogram="row", symm = T, col=bluered(16), breaks=my.breaks)
dev.off() 

我遇到的问题是,一旦我使用中断来帮助我控制颜色分离,热图看起来不再对称。

这是我使用中断之前的热图,您可以看到热图看起来是对称的:

以下是使用休息时的热图:

我已经使用了序列的截止点,以确保例如一个序列不会在另一个序列开始的位置结束,但我无法解决这个问题。我想利用休息时间来帮助更多地展示集群。

这是一个应该是什么样子的示例,此图像是使用集群制造商制作的:

我不希望它看起来与此相同,但如果我的热图更对称并且我在集群方面有更好的定义,我会喜欢它。该图像是使用相同的数据创建的。

【问题讨论】:

    标签: r matrix cluster-analysis data-visualization heatmap


    【解决方案1】:

    我当然不是那种尝试从那个奇怪的数据对象中复制和测试它而没有可以正确读取它的代码的人,但这里有一个想法:

      ..., col=bluered(20)[4:20], ...
    

    这是另一个虽然应该返回完整的红色兰特,但上述策略不会:

     shift.BR<- colorRamp(c("blue","white", "red"), bias=0.5 )((1:16)/16)
     heatmap.2( ...., col=rgb(shift.BR, maxColorValue=255), .... )
    

    或者你可以使用这个向量:

    > rgb(shift.BR, maxColorValue=255)
     [1] "#1616FF" "#2D2DFF" "#4343FF" "#5A5AFF" "#7070FF" "#8787FF" "#9D9DFF" "#B4B4FF" "#CACAFF" "#E1E1FF" "#F7F7FF"
    [12] "#FFD9D9" "#FFA3A3" "#FF6C6C" "#FF3636" "#FF0000"
    

    有一个有点类似的问题(也是今天),它要求从 -1 到 3 的一组值(以白色为中心)从蓝色到红色的解决方案。这是该问题的代码和输出:

    test <- seq(-1,3, len=20)
    shift.BR <- colorRamp(c("blue","white", "red"), bias=2)((1:20)/20)
    tpal <- rgb(shift.BR, maxColorValue=255)
    barplot(test,col = tpal)
    

    (但在你的情况下,这似乎是错误的偏见方向。)

    【讨论】:

    • 感谢您在尝试您的解决方案时提出的建议,但是我得到的结果与我使用休息时间之前得到的结果相似。那里的问题是我失去了集群的所有分辨率。我需要使用中断或类似的东西,以便我可以控制颜色边界,但在我的情况下,我需要生成的热图看起来对称,但热图的右上角和左下角是不同的颜色模式.
    • 其实我给了两个建议。
    • 确实是我的错误,当我说 sugestion 时,我的意思是整个回答器。我与您的其他建议一起玩,我认为它看起来很接近:plus.google.com/photos/108505223022973601424/albums/… 所以它看起来更好但左上角和右上角仍然不存在,另一个问题是我无法精确校准“ bias=2)((1:20)/20)" 以便颜色范围在红色方面具有更多定义。谢谢
    • 在我看来,您想要一个非单调的颜色图,它在 1 附近达到最密集的红色,并在 1 和 3 之间保持密集的红色。使用所示方法应该不会太难。
    • 嗨 DWin,当我停止执行 mtscaled
    【解决方案2】:

    经过一些调查,我注意到在通过热图或 heatmap.2 运行我的矩阵后,值正在发生变化,例如从提供的数据集中获取的交互

    Pacdh-2 和 peg-2

    在矩阵被发送到热图之前给出的值为 0.0250313。
    之后,我使用 result$carpet 查看了矩阵值,然后这些值是

    -0.224333135 -1.09805379

    对于两个交互

    然后我决定根据聚类矩阵中的树状图对原始矩阵重新排序,以确保值是相同的。我使用以下堆栈溢出问题寻求帮助: Order of rows in heatmap?

    这是用于此的代码:

    rowInd <- rev(order.dendrogram(result$rowDendrogram))
    colInd <- rowInd
    data_ordered <- matrix_a[rowInd, colInd]
    

    然后我使用另一个程序“matrix2png”来绘制热图:

    我仍然需要调整颜色,但至少现在热图是对称且聚集的。

    进一步研究问题似乎是当我将代码更改为 mtscaled &lt;- as.matrix(matrix_a) 时,我正在运行 scale(matrix_a),结果现在看起来是对称的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 1970-01-01
      相关资源
      最近更新 更多