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! :-)
1 votes
@Andrie Ce que vous suggérez fonctionne, mais la résolution de l'image est très faible. Lorsque je sauvegarde un seul
ggplot
en utilisantggsave()
, la résolution de l'image est beaucoup plus élevée. Existe-t-il un moyen de sauvegarder la sortie degrid.arrange()
avec une haute résolution, comme ce serait le cas pour un seul graphique sauvegardé avecggsave()
? Si je fournis par exemple les optionspng(...,height=1600, width=2500)
l'image semble très floue.