R - сохранение мультиплекса в файл
ИД действительно ценю вашу помощь по следующей проблеме. Я знаю несколько способов сохранить один файл в файле. Мой вопрос: как правильно сохранить множитель в файл?
Для начала, я не опытный пользователь R. Я использую ggplot2 для создания своих сюжетов, и еще одна вещь, о которой я должен упомянуть, это то, что я использую графический интерфейс RStudio. Используя пример из R Cookbook, я могу создать несколько графиков в одном окне.
Я хотел бы сохранить этот так называемый мультиплекс в файл (желательно как jpeg), но как-то не могу этого сделать.
Im создает мультипликатор следующим образом:
##define multiplot function
multiplot <- function(..., plotlist=NULL, cols) {
require(grid)
# Make a list from the ... arguments and plotlist
plots <- c(list(...), plotlist)
numPlots = length(plots)
# Make the panel
plotCols = cols # Number of columns of plots
plotRows = ceiling(numPlots/plotCols) # Number of rows needed, calculated from # of cols
# Set up the page
grid.newpage()
pushViewport(viewport(layout = grid.layout(plotRows, plotCols)))
vplayout <- function(x, y)
viewport(layout.pos.row = x, layout.pos.col = y)
# Make each plot, in the correct location
for (i in 1:numPlots) {
curRow = ceiling(i/plotCols)
curCol = (i-1) %% plotCols + 1
print(plots[[i]], vp = vplayout(curRow, curCol ))
}
}
## define subplots (short example here, I specified some more aesthetics in my script)
plot1a <- qplot(variable1,variable2,data=Mydataframe1)
plot1b <- qplot(variable1,variable3,data=Mydataframe1)
plot1c <- qplot(variable1,variable2,data=Mydataframe2)
plot1d <- qplot(variable1,variable3,data=Mydataframe2)
## plot in one frame
Myplot <- multiplot(plot1a,plot1b,plot1c,plot1d, cols=2)
Это дает желаемый результат. Проблема возникает, когда я пытаюсь сохранить файл. Я могу сделать это вручную в RStudio (используя Export → Save plot как изображение), но я хотел бы запустить все в script. Мне удается сохранить только subplot1d (который является last_plot()), а не полный множитель.
Что Ive пробовал до сих пор:
-
Использование ggsave
ggsave(filename = "D:/R/plots/Myplots.jpg")
Это приводит к сохранению только подзаголовка 1d.
-
Использование jpeg(), print() и dev.off()
jpeg(filename = "Myplot.jpg", pointsize =12, quality = 200, bg = "white", res = NA, restoreConsole = TRUE)
print(Myplot)
dev.off()
Это приводит к полностью белым изображениям (только предположение, которое я предполагаю). print (Myplot) возвращает NULL.
Не уверен, что я делаю неправильно здесь. Мое непонимание R - причина, по которой я застреваю, пытаясь найти решение. Может ли кто-нибудь объяснить, что я делаю неправильно, и, возможно, предложить способ решить мои проблемы?
Ответы
Ответ 1
Потому что Myplot
- это возвращаемое значение из вашей мультимножной функции, и оно ничего не возвращает (его задача заключается в печати графиков). Вам нужно вызвать мультиплекс с открытым устройством jpeg:
jpeg(filename = "Myplot.jpg", pointsize =12, quality = 200, bg = "white", res = NA, restoreConsole = TRUE)
multiplot(plot1a,plot1b,plot1c,plot1d, cols=2)
dev.off()
должен работать.
Ответ 2
Используя пример кода (R cookbook), он работает для меня
png("chickweight.png")
multiplot(p1, p2, p3, p4, cols=2)
dev.off()
![enter image description here]()
Ответ 3
И для полноты, ggsave
не работает, поскольку он сохраняет только последний напечатанный объект ggplot, который в вашем случае является всего лишь последним сюжетом. Это вызвано тем фактом, что множитель создает график, рисуя объекты ggplot на разные подмножества общего графического устройства. Альтернативой является создание графика путем объединения объектов ggplot в один большой объект ggplot, а затем для печати объекта. Это будет совместимо с ggsave
. Этот подход реализуется arrangeGrob
в пакете gridExtra
.