162 votes

Enregistrer le graphique grid.arrange() dans un fichier

Je tente de tracer plusieurs graphiques en utilisant ggplot2, en les disposant avec grid.arrange(). Comme j'ai réussi à trouver quelqu'un décrivant exactement le problème que j'ai, j'ai cité la description du problème à partir du lien:

Lorsque j'utilise ggsave() après grid.arrange(), c'est-à-dire

grid.arrange(sgcir1,sgcir2,sgcir3,ncol=2,nrow=2)
ggsave("sgcirNIR.jpg")

Je ne sauvegarde pas le graphique en grille mais le dernier ggplot individuel. Existe-t-il un moyen de sauvegarder réellement le graphique tel qu'il est affiché par grid.arrange() en utilisant ggsave() ou quelque chose de similaire? Autre que d'utiliser l'ancienne méthode

jpeg("sgcirNIR.jpg")
grid.arrange(sgcir1,sgcir2,sgcir3,ncol=2,nrow=2)
dev.off()

Le même lien donne la solution ci-dessous:

require(grid)
require(gridExtra)
p <- arrangeGrob(qplot(1,1), textGrob("test"))
grid.draw(p) # appareil interactif
ggsave("saving.pdf", p) # besoin de spécifier ce qu'il faut sauvegarder explicitement

Cependant, je ne parviens pas à comprendre comment utiliser ggsave() pour sauvegarder la sortie de l'appel à grid.arrange() dans le code suivant, qui est tiré de lien:

library(ggplot2)
library(gridExtra)
dsamp <- diamonds[sample(nrow(diamonds), 1000), ] 

p1 <- qplot(carat, price, data=dsamp, colour=clarity)
p2 <- qplot(carat, price, data=dsamp, colour=clarity, geom="path")

g_legend<-function(a.gplot){
tmp <- ggplot_gtable(ggplot_build(a.gplot))
leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
legend <- tmp$grobs[[leg]]
return(legend)}

legend <- g_legend(p1)
lwidth <- sum(legend$width)

## using grid.arrange for convenience
## could also manually push viewports
grid.arrange(arrangeGrob(p1 + theme(legend.position="none"),
                                        p2 + theme(legend.position="none"),
                                        main ="this is a title",
                                        left = "This is my global Y-axis title"), legend, 
                     widths=unit.c(unit(1, "npc") - lwidth, lwidth), nrow=1)

# Quel code mettre ici pour sauvegarder la sortie de grid.arrange()?

6 votes

Utilisez png(); grid.arrange(); ggplot(); ggplot(); dev.off()

2 votes

Pas print(ggplot())?

0 votes

@DWin Oui, probablement! :-)

4voto

Essayez ceci

ggsave("whatever.png", plot=grid.arrange(plot1, plot2, plot3, nrow=3), device=..., scale = ..., width =..., height = ..., units = "...", dpi = ...)

2voto

TeYaP Points 272

Une autre solution simple: juste après votre grid.arrange()

grid.arrange(plot1, plot2, plot3, nrow=3)

faites un dev.copy()

dev.copy(pdf,"whatever.pdf")
dev.off()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X