简体   繁体   中英

Error in heatmap.2 in R gplots

I am using heatmap.2 in gplots to create heatmaps in R. My code used to work fine for creating a heatmap. But recently it started throwing errors. I am not sure why it is happening.

# 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()

Now it throws error:

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

This code plots the heatmap but not the color key .

I had this same problem using heatmap.2. It seems to result from having one or more zero values in the vector returned by diff(breaks). The 'by' call fails when min(diff(breaks)) is zero. I changed my break points to be non-overlapping and the color key was able to be displayed.

Initially I had: breaks=c(seq(0,0.033,length=25),seq(0.033,0.066,length=26),seq(0.066,0.1,length=25))

I changed this to: breaks=c(seq(0,0.033,length=25),seq(0.0331,0.066,length=26),seq(0.0661,0.1,length=25))

It seems to have resolved the issue and allows me to use the color key again.

I am having the same issue. I was able to produce a plot with a key, but not with as much control as I'd like:

I removed the "breaks" option entirely and used col=redblue(64) and that produced a two-colored heatmap with a key.

I had the following problem, getting the above example:

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")    

Generates this heatmap:

starting heatmap

But if I introduce a negative number in the matrix and I modify the breaks in the vector to account for this negative number, ie

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")  

The key completely fails:

failed heatmap

Following this answer adding simkey=FALSE solves the issue, and it seems to work in this example:

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

As you can see:

correct heatmap

Using the same break points (in my example two times 10 and 40 respectively) gives this error, ie:

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))

brings this error, while

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))

solves this error for:

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")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM