R - enregistrer multiplot de fichier

J'apprécierais vraiment de votre aide pour le problème suivant. Je sais que plusieurs façons d'enregistrer une seule parcelle à un fichier. Ma question est: Comment puis-je enregistrer correctement un multiplot à un fichier?

Pour commencer, je ne suis pas un utilisateur expérimenté de R. J'utilise ggplot2 pour créer mes parcelles, et une autre chose que je devrais probablement mentionner, c'est que j'utilise le RStudio GUI. À l'aide d'un exemple de la R livre de cuisine, je suis en mesure de créer plusieurs parcelles dans une fenêtre.

Je voudrais enregistrer ce soi-disant multiplot à un fichier (de préférence en format jpeg), mais de toute façon ce n'.

Je suis de la création de la multiplot comme suit:

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

Ce qui donne le résultat souhaité. Le problème se pose lorsque j'essaie d'enregistrer dans un fichier. Je peux le faire manuellement dans RStudio (à l'aide d'Exportation -> Enregistrer parcelle de l'image), mais je voudrais tout faire dans un script. J'ai réussi à enregistrer seulement subplot1d (qui est last_plot()), et de ne pas le terminer multiplot.

Ce que j'ai essayé jusqu'à présent:

  1. À l'aide de ggsave

    ggsave(filename = "D:/R/plots/Myplots.jpg")

    Cette seule intrigue secondaire 1d être sauvé.

  2. Jpeg(), print() et dev.off()

    jpeg(filename = "Myplot.jpg", pointsize =12, quality = 200, bg = "white", res = NA, restoreConsole = TRUE)
    print(Myplot)
    dev.off()

    Il en résulte un tout blanc de l'image (juste le fond je suppose). print(Myplot) renvoie la valeur NULL.

Pas sûr de ce que je fais mal ici. Mon manque de compréhension de R est la raison pour laquelle je suis coincé à essayer de trouver une solution. Quelqu'un peut-il expliquer ce que je fais mal et peut-être proposer un moyen de résoudre mon problème(s)?

  • Vous pouvez également utiliser gridExtra::grille.organiser(plot1a,plot1b,plot1c,plot1d, ncol = 2)
  • Le gridExtra package ne contient pas de grille.organiser, il ne contient pas de arrangeGrob qui semble offrir les mêmes fonctionnalités. J'ai aussi semble me rappeler une fonction appelée grille.organiser, peut-être que l'auteur a changé la fonction des titres dans le package.
  • grid.arrange devrait être dans gridExtra. Incidemment, l'un des avantages de arrangeGrob vs multiplot est qu'il est compatible avec ggsave, et que vous pouvez stocker le composite grob pour une utilisation ultérieure.
  • Je veux juste mentionner que le jpeg est probablement pas le meilleur choix. Si l'intrigue devrait se retrouver comme une image raster (et pas, par exemple, pdf ou eps), utilisez plutôt le format png. Il utilise une compression sans perte, c'est à dire il n'y aura pas d'artefacts autour de contraste des régions telles que du texte ou des lignes. Sa compression fonctionne également idéal pour les images avec de grandes zones d'une seule couleur, comme les parcelles.
InformationsquelleAutor M_Vermeulen | 2012-07-30