Как нарисовать график pheatmap на экране, а также сохранить в файл

#r #ggsave

Вопрос:

Я работаю с пакетом pheatmap. По умолчанию он выводит график на экран. В моем случае это означает вывод в записную книжку R markdown в R studio. Но я также хочу сохранить его в файл. Если я сохраню его в файл, указав ему filename= аргумент, он не отобразится на экране (R notebook). Есть ли способ добиться того, чтобы произошло и то, и другое? И в более общем плане, с любым сюжетом (ggplot2), где я хочу как сохранить, так и показать на экране?

Ответ №1:

Авторы pheatmap, похоже, не сделали это супер простым. Но это то, что вам нужно будет сделать в два отдельных шага. Сначала мы используем примеры данных со страницы ?pheatmap справки

 test = matrix(rnorm(200), 20, 10)
test[1:10, seq(1, 10, 2)] = test[1:10, seq(1, 10, 2)]   3
test[11:20, seq(2, 10, 2)] = test[11:20, seq(2, 10, 2)]   2
test[15:20, seq(2, 10, 2)] = test[15:20, seq(2, 10, 2)]   4
colnames(test) = paste("Test", 1:10, sep = "")
rownames(test) = paste("Gene", 1:20, sep = "")
 

Мы можем отобразить график и сохранить результат с помощью

 xx <- pheatmap(test)
 

Затем вы можете вывести это в файл, открыв графическое устройство и перерисовав результат так, как это делается в основной функции

 save_pheatmap_pdf <- function(x, filename, width=7, height=7) {
   stopifnot(!missing(x))
   stopifnot(!missing(filename))
   pdf(filename, width=width, height=height)
   grid::grid.newpage()
   grid::grid.draw(x$gtable)
   dev.off()
}
save_pheatmap_pdf(xx, "test.pdf")
 

Этот пакет напрямую использует библиотеку grid и не использует ggplot2 , поэтому решения для этого пакета будут другими. ggsave Функция упрощает сохранение последнего нарисованного графика в файл.

Комментарии:

1. Спасибо! Это очень полезно. Жаль, что это немного запутанно, но я все равно приму это.

Ответ №2:

К вашему сведению, я создал более сложную функцию, которая включает в себя создание диаграммы объектов, а затем вызов save_heatmap функции сверху. Я публикую это здесь, если это кому-то полезно, а также для критики. Я добавил строку для сохранения файла изображения тепловой карты с именем матрицы, которая порождает тепловую карту. Это полезно для последующей организации файлов.

 save_pheatmap <- function(x, filename, width=480, height=960) {
   stopifnot(!missing(x))
   stopifnot(!missing(filename))
   png(filename,width = width, height=height)
   grid::grid.newpage()
   grid::grid.draw(x$gtable)
   dev.off()
}

plot_heatmap <- function(mat,color=NULL, cluster_rows=NULL, cluster_cols=NULL, scale=NULL, 
  cellwidth=NULL, cellheight=NULL,show_colnames=NULL, labels_col=NULL, show_rownames=NULL,
  border_color=NULL,legend=NULL,...){

  #Default Color
  if (is.null(color)){
    color=rev(col.pal)
  }

  #Default cluster
  if (is.null(cluster_rows)){
    cluster_rows=FALSE
  }

  if (is.null(cluster_cols)){
    cluster_cols=FALSE
  }

  #Default sclae
  if(is.null(scale)){
    scale="none"
  }

  #Default cell dims
  if (is.null(cellwidth)){
    cellwidth=12
  }

  if (is.null(cellheight)){
    cellheight=12
  }

  #Default Labels

  if (is.null(show_colnames)){
    show_colnames=TRUE
  }

  if (is.null(labels_col)){
    labels_col=NULL
  }

  if (is.null(show_rownames)){
    show_rownames=FALSE
  }

  #Set border

  if (is.null(border_color)){
    border_color=NA
  }

  #Legend

  if (is.null(legend)){
    legend=FALSE
  }


  temp_hm <- pheatmap(mat,color=color, cluster_rows=cluster_rows, cluster_cols=cluster_cols, scale=scale, 
  cellwidth=cellwidth, cellheight=cellheight,show_colnames=show_colnames, labels_col=labels_col,
  show_rownames=show_rownames,border_color=border_color,legend=legend)

  temp_hm_name <- paste(deparse(substitute(mat)),".png", sep="")

  save_pheatmap(temp_hm, filename=temp_hm_name)
 

}

Ответ №3:

wplot_save_this() Функция в MarkdownReports сохраняет любой отображаемый график в .pdf файл. Кроме того, все другие функции построения графика в package ( wbarplot (), whist(), wplot(), etc ) автоматически отображают и сохраняют соответствующие as .pdf , а также связывают их с записной книжкой / отчетом Markdown.