2

我在 gplots 中使用 heatmap.2 在 R 中创建热图。我的代码过去可以很好地创建热图。但最近它开始抛出错误。我不确定为什么会这样。

# Matrix to feed heatmap.2
mat = as.matrix(sort_pkmat)
# color palette for diff. colors
my_palette <- colorRampPalette(c("white","red","red4"))(n = 299)
# color breaks for range
col_breaks = c(seq(0,40,length=100),
               seq(40,60,length=100),
               seq(60,90,length=100))

path1 = paste(path,name,'.png', sep = '')
print(path1)
png(path1, 
    width = 10*300,        # 5 x 300 pixels
    height = 8*300,
    res = 300,            # 300 pixels per inch
    pointsize = 8)


heatmap.2(mat, 
          #cellnote = mat,  # same data set for cell labels
          main = "Tag_density_HeatMap", # heat map title
          xlab = "Peaks",
          ylab = "Chip_samples",
          labRow = FALSE,
          labCol = FALSE,
          cexRow = 0.7,           # Changes the size of col and row font size
          cexCol = 0.2,
          notecol="black",      # change font color of cell labels to black
          density.info="none",  # turns off density plot inside color legend
          trace="none",         # turns off trace lines inside the heat map
          margins =c(3,5),     # widens margins around plot
          col=my_palette,       # use on color palette defined earlier
          breaks=col_breaks,    # enable color transition at specified limits
          dendrogram="none",     # only draw a row dendrogram
          Colv= FALSE,           #cluster column
          Rowv = FALSE,
          #keysize = 1
)
dev.off()

现在它抛出错误:

Error in seq.default(min.raw, max.raw, by = min(diff(breaks)/4)) : 
  invalid (to - from)/by in seq(.)
> dev.off()
null device 
          1 

此代码绘制热图但不绘制颜色键

4

5 回答 5

2

我在使用 heatmap.2 时遇到了同样的问题。这似乎是由于 diff(breaks) 返回的向量中有一个或多个零值。当 min(diff(breaks)) 为零时,'by' 调用失败。我将断点更改为不重叠,并且能够显示颜色键。

最初我有:breaks=c(seq(0,0.033,length=25),seq(0.033,0.066,length=26),seq(0.066,0.1,length=25))

我将其更改为:breaks=c(seq(0,0.033,length=25),seq(0.0331,0.066,length=26),seq(0.0661,0.1,length=25))

它似乎已经解决了这个问题,并允许我再次使用颜色键。

于 2015-06-02T11:11:50.037 回答
1

我有同样的问题。我能够用钥匙制作一个情节,但没有我想要的那么多控制:

我完全删除了“breaks”选项并使用了 col=redblue(64) 并生成了带有键的双色热图。

于 2015-05-29T19:04:57.940 回答
1

我实际上也遇到过这个问题,需要结合上述两个答案才能得到工作代码。

  1. col_breaks 数字不应重叠。
  2. col_breaks 应该从负数到正数,反之亦然。例子:
col_breaks = c(seq(-3,-1,length=100),  # for red
  seq(-0.99,0.99,length=100),           # for yellow
  seq(1,3,length=100))             # for green

注意:simkey=FALSE调用 heatmap.2() 函数时不需要添加。

于 2021-08-09T09:51:28.800 回答
1

我遇到了以下问题,得到了上面的例子:

x = matrix(runif(100^2, min=0, max=100), ncol=100)
my_palette <- colorRampPalette(c("red", "yellow", "green"))(n = 99) # 100 percent
col_breaks = c(seq(0,10,length=40),  
             seq(11,40,length=30),              
             seq(41,100,length=30))
hm <- heatmap.2(x,
           col=my_palette,       
           breaks=col_breaks,
           dendrogram="none",
           Colv="NA", Rowv="NA")    

生成此热图:

开始热图

但是如果我在矩阵中引入一个负数并修改向量中的中断来解释这个负数,即

x = matrix(runif(100^2, min=-1, max=100), ncol=100)
col_breaks = c(seq(-1,10,length=40),  
             seq(11,40,length=30),              
             seq(41,100,length=30))
hm <- heatmap.2(x,
           col=my_palette,       
           breaks=col_breaks,
           dendrogram="none",
           Colv="NA", Rowv="NA")  

密钥完全失败:

失败的热图

按照这个答案添加simkey=FALSE解决了这个问题,它似乎在这个例子中工作:

hm <- heatmap.2(x,
           col=my_palette,       
           breaks=col_breaks,
           symkey=FALSE,
           dendrogram="none",
           Colv="NA", Rowv="NA")

如你看到的:

正确的热图

于 2018-11-06T13:01:44.413 回答
0

使用相同的断点(在我的示例中,分别是两次 10 和 40)会产生此错误,即:

my_palette <- colorRampPalette(c("red", "yellow", "green"))(n = 99) # 100 percent


col_breaks = c(seq(0,10,length=40),  
                 seq(10,40,length=30),              
                 seq(40,100,length=30))

带来了这个错误,而

my_palette <- colorRampPalette(c("red", "yellow", "green"))(n = 99) # 100 percent



col_breaks = c(seq(0,10,length=40),  
                 seq(11,40,length=30),              
                 seq(41,100,length=30))

解决了这个错误:

x = matrix(runif(100^2, min=0, max=100), ncol=100)
hm <- heatmap.2(x,
               col=my_palette,       
               breaks=col_breaks,
               dendrogram="none",
               Colv="NA", Rowv="NA")
于 2015-06-25T14:14:58.020 回答