#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.