4

我正在尝试对蛋白质 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() 

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

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

这是使用休息时的热图: 有休息

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

这是它应该是什么样子的示例,此图像是使用集群制造商制作的: 在此处输入图像描述

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

4

2 回答 2

2

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

pacdh-2 和 pegg-2

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

-0.224333135 -1.09805379

对于两个交互

因此,我决定根据聚类矩阵中的树状图对原始矩阵进行重新排序,以确保这些值是相同的。我使用以下堆栈溢出问题寻求帮助: 热图中的行顺序?

这是用于此的代码:

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

然后我使用另一个程序“matrix2png”来绘制热图: 在此处输入图像描述

我仍然必须使用颜色,但至少现在热图是对称的和聚集的。

更深入地研究它,问题似乎是scale(matrix_a)当我将代码更改为mtscaled <- as.matrix(matrix_a)现在看起来对称的结果时我正在运行。

于 2012-10-02T14:14:28.963 回答
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)

在此处输入图像描述

(但对于您的情况,这似乎是错误的方向。)

于 2012-09-28T22:33:44.217 回答