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

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


person Alex    schedule 27.03.2017    source источник


Ответы (3)


Авторы тепловой карты, похоже, не очень-то упростили эту задачу. Но это то, что вам нужно будет сделать в два отдельных шага. Во-первых, мы используем образцы данных со страницы справки ?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")

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

person MrFlick    schedule 27.03.2017
comment
Спасибо! Это очень полезно. Жаль, что это запутанно, но я все равно возьму это. - person Alex; 27.03.2017

К вашему сведению, я сделал более сложную функцию, которая включает в себя создание тепловой карты, а затем вызов функции 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)

}

person Alex    schedule 01.04.2017

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

person bud.dugong    schedule 02.01.2018