试图确定为什么我的热图是用heatmap.2制作的,而在R中使用断点是不对称的

试图确定为什么我的热图是用heatmap.2制作的,而在R中使用断点是不对称的,r,matrix,cluster-analysis,data-visualization,heatmap,R,Matrix,Cluster Analysis,Data Visualization,Heatmap,我正在尝试对一个蛋白质-dna相互作用数据集进行聚类,并使用来自GPR包的heatmap.2绘制一个热图。我的矩阵是对称的。 这是我通过pearson运行后使用的数据集的副本: 以下是生成这些图的完整过程:在我的例子中,使用一些相关性生成一个距离矩阵,然后将该矩阵传递给R,并在其上运行以下代码: library(RColorBrewer); library(gplots); library(MASS); args <- commandArgs(TRUE); matrix_a <- r

我正在尝试对一个蛋白质-dna相互作用数据集进行聚类,并使用来自GPR包的heatmap.2绘制一个热图。我的矩阵是对称的。
这是我通过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() 
库(RColorBrewer);
图书馆(gplots);
图书馆(弥撒);

args我当然不是那种试图在没有正确读取代码的情况下从奇怪的数据对象中复制和测试这些数据的人,但我有一个想法:

  ..., 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), .... )
还有一个类似的问题(也是今天的问题),要求对一组从-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)

test在一些调查之后,我注意到在通过heatmap或heatmap.2运行我的矩阵之后,值正在变化,例如从提供的数据集获取的交互作用

Pacdh-2 及 聚乙二醇-2

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

-0.224333135 -1.09805379

对于这两种相互作用

然后我决定根据聚类矩阵的树状图对原始矩阵重新排序,这样我就可以确定值是相同的。我使用以下堆栈溢出问题寻求帮助:

以下是用于此目的的代码:

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

rowInd感谢您在我尝试您的解决方案时提出的建议,但是我得到的结果与我使用中断之前得到的结果相似。这里的问题是,我失去了集群的所有分辨率。我需要使用打断,或者类似的方法来控制颜色边界,但是在我的例子中,我需要生成的热图看起来是对称的,但是热图的右上角和左下角是不同的颜色模式。实际上我给出了两个建议。我的错误是正确的,我说的sugestion是指你的整个anwser。我考虑了你的其他建议,我认为这很接近它看起来的样子:因此它看起来更好,但左上角和右上角仍然不存在,另一个问题是我在精确校准“偏差=2”((1:20)/20)”方面遇到困难,因此颜色范围在红色方面有更多的定义。谢谢你告诉我你想要一个非单调的颜色贴图,在这里它在1附近达到最密集的红色,在1和3之间保持密集的红色。用图示的方法应该不会太难。嗨,当我停止做MTSCALE时,德温
rowInd <- rev(order.dendrogram(result$rowDendrogram))
colInd <- rowInd
data_ordered <- matrix_a[rowInd, colInd]