Части, отсутствующие на графике, затем вновь появляются и перезаписывают весь график при сохранении? (R, Heatmap.2) - PullRequest
0 голосов
/ 15 апреля 2019

Я использую heatmap.2 для создания графика, однако на начальном графике, сохраненном в моей исходной папке, отсутствуют ключ и заголовок.

Когда я запускаю команду dev.off(), тогда ключ и заголовок используются для перезаписи исходного графика?

Например, я создам сюжет вроде этого:

enter image description here

Что далеко не идеально. Но затем, когда я запускаю dev.off(), чтобы закрыть устройство (в противном случае возникает множество других ошибок):

enter image description here

То, на что вы смотрите выше, это очень искаженный Ключ и мой заголовок 'XYZ'.

С какой стати он создает два файла, сначала один с моей матрицей, а затем перезаписывает его вторым файлом, содержащим мой ключ переключения и мой заголовок? Я не могу следовать логике.

Я обновил свою ОС, мою версию R, RStudio, все мои пакеты и неустановленную версию RStudio. Кажется, ничто не помогает.

Если вы хотите повторить мою ошибку, вот пример матрицы:

structure(c(1, 4, 5, 3, 3, 4, 6, 1, 7, 5, 5, 4, 4, 8, 1, 3, 9, 
2, 2, 9, 3, 1, 3, 4, 4, 5, 5, 5, 1, 4, 4, 3, 3, 3, 9, 1), .Dim = c(6L, 
6L))

И это сценарий, который я использую для построения данных моего примера. Вам нужно будет указать SourceDir и назначить матрицу названию «Matrix».

if (!require("gplots")) {
  install.packages("gplots", dependencies = TRUE)
  library(gplots)
}
if (!require("RColorBrewer")) {
  install.packages("RColorBrewer", dependencies = TRUE)
  library(RColorBrewer)
}

my_palette <- colorRampPalette(c("snow", "yellow", "darkorange", "red"))(n = 399)


transition
    col_breaks = c(seq(0,1,length=100),    #white 'snow'
                   seq(2,4,length=100), # for yellow
                   seq(5,7,length=100), # for orange 'darkorange'
                   seq(8,9,length=100))    # for red


png(paste(SourceDir, "Heatmap_Test.png"),      
    width = 5*1000,       
    height = 5*1000,
    res = 300,           
    pointsize =15)

heatmap.2(Matrix,
          main =  paste("XYZ"), 
          notecol="black",
          key = "true" ,
          colsep = c(3, 6, 9),
          rowsep = c(3, 6, 9),
          labCol = NULL,
          labRow = NULL,
          sepcolor="white",
          sepwidth=c(0.08,0.08),
          density.info="none",  
          trace="none",         
          margins=c(1,1),     
          col=my_palette,       
          breaks=col_breaks,    
          dendrogram="none",     
          RowSideColors = c(rep("blue", 3), rep("orange", 3)),
          ColSideColors = c(rep("blue", 3), rep("orange", 3)),
          srtCol = 0 ,        
          asp = 1 ,         
          adjCol = c(NA, 0) , 
          adjRow = c(0, NA) , 
          #keysize =  2 ,  
          Colv = FALSE ,      
          Rowv =  FALSE ,    
          key.xlab = paste("Correlation") , 
          cexRow = (1.8) , 
          cexCol = (1.8) , 
          notecex = (1.5) , 
          lmat = rbind(c(0,0,0,0), c(0,0,2,0),c(0,1,3,0),c(0,0,0,0)) , 
          #par(ColSideColors = c(2,2)),
          lhei = c(1, 1, 3, 1) , 
          lwid = c(1, 1, 3, 1)) 

dev.off()

Я бы очень признателен за понимание этой проблемы.

1 Ответ

0 голосов
/ 16 апреля 2019

Полагаю, это произошло из-за того, что у меня было больше, чем просто элементы от 1 до 4, поскольку добавленные мной цветные строки считались дополнительными элементами, которые должны были быть расположены в матрице дисплея.

Как таковые:

mat = rbind(c(0,0,0,0), c(0,0,2,0),c(0,1,3,0),c(0,0,0,0)) , 
lhei = c(1, 1, 3, 1) , 
lwid = c(1, 1, 3, 1))

Больше не режьте масло.После долгих раздумий мне наконец удалось заставить работать следующий макет (на моих реальных данных, а не на моих данных примера).

lmat = rbind(c(0,4,5,0), c(0,0,2,0),c(0,1,3,0),c(0,0,6,0)) , 
lhei = c(0.4, 0.16, 3, 0.4) , # Alter dimensions of display array cell heighs
lwid = c(0.4, 0.16, 3, 0.4),

Обратите внимание на включение элементов 5 и 6.

Итак, моя последняя команда выглядит следующим образом (обратите внимание, что будет много других изменений, но реальный прогресс произошел, как только я добавлю в 5 и 6):

png(paste(SourceDir, "XYZ.png"),         
    width = 5*1500,        
    height = 5*1500,
    res = 300,            # 300 pixels per inch
    pointsize =30)        

heatmap.2(CombinedMtx,
          main =  paste("XYZ"), # heat map title
          notecol="black",
          key = "true" ,# change font color of cell labels to black
          colsep = c(6, 12, 18),
          labCol = c(" "," "," ", "XX"," "," "," "," "," ", "YY"," "," "," "," "," ", "ZZ"," "," "," "," "," ", "QQ"),
          rowsep = c(6, 12, 18),
          labRow = c(" "," "," ", "XX"," "," "," "," "," ", "YY"," "," "," "," "," ", "ZZ"," "," "," "," "," ", "QQ"),
          sepcolor="white",
          sepwidth=c(0.08,0.08),
          density.info="none",  
          trace="none",         
          margins=c(1,1),     
          col=my_palette,      
          breaks=col_breaks,   
          dendrogram="none",     
          RowSideColors = c(rep("#deebf7", 6), rep("#1c9099", 6), rep("#addd8e", 6), rep("#fee391", 6)),
          ColSideColors = c(rep("#deebf7", 6), rep("#1c9099", 6), rep("#addd8e", 6), rep("#fee391", 6)),
          srtCol = 0 ,        
          asp = 1 ,         
          adjCol = c(1.5, -61.5) , 
          adjRow = c(0, -1.38), 
          offsetRow = (-59.5),
          keysize =  2 ,  
          Colv = FALSE ,     
          Rowv =  FALSE ,    
          key.xlab = NA , 
          key.ylab = NULL ,
          key.title = NA ,
          cexRow = (1.6) , 
          cexCol = (1.6) , 
          notecex = (1.5) , 
          cex.main = (20),
          lmat = rbind(c(0,4,5,0), c(0,0,2,0),c(0,1,3,0),c(0,0,6,0)) , 
          #par(ColSideColors = c(2,2)),
          lhei = c(0.4, 0.16, 3, 0.4) , # Alter dimensions of display array cell heighs
          lwid = c(0.4, 0.16, 3, 0.4),
          symkey = any(0.5 < 0, na.rm=FALSE) || col_breaks,
          key.par=list(mar=c(3.5,0, 1.8,0) )  #tweak specific key paramters
)
dev.off() 

Кроме того, если вы не запускаете каждый разСоздание PNG и ENF каждый раз с помощью dev.off() не будет работать.Я полагаю, что это могло также внести свой вклад в мое замешательство, и, возможно, после рисования тепловой карты некоторые элементы были нарисованы после запуска команды dev.off (), что привело к перезаписи тепловой карты.

Это (с моей матрицей) создает это изображение.

enter image description here

То, что я сделал, - это действительно забавный способ маркировки моих блоковно пока я не смогу понять, как заставить ComplexHeatmap работать должным образом, я застряну, используя подобные хаки с Heatmap.2.

...