Я работаю с пакетом тепловой карты. По умолчанию он рисует график на экране. В моем случае это означает вывод в блокноте R markdown в R studio. Но я также хочу сохранить в файл. Если я сохраню его в файл с аргументом filename=
, он не будет отображаться на экране (ноутбук R). Есть ли способ заставить обе вещи произойти? И вообще, с любым сюжетом (ggplot2), где я хочу и сохранить, и показать на экране?
Как вывести график тепловой карты на экран, а также сохранить в файл
Ответы (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
упрощает сохранение последнего нарисованного графика в файл.
К вашему сведению, я сделал более сложную функцию, которая включает в себя создание тепловой карты, а затем вызов функции 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)
}
Функция wplot_save_this()
в MarkdownReports сохраняет любой отображаемый график в файл .pdf
. Кроме того, все другие функции построения графиков в пакете (wbarplot (), whist(), wplot(), etc
) автоматически отображаются и сохраняются как .pdf
, а также связываются с блокнотом/отчетом Markdown.