J'essaie d'enregistrer un ggplot dans une fonction à l'aide de périphériques graphiques. Mais j'ai trouvé que le code produit des graphiques vides. Voici un exemple très très simple.
library(ggplot2)
ff <- function(){
jpeg("a.jpg")
qplot(1:20, 1:20)
dev.off()
}
ff()
Si je lance uniquement le contenu de la fonction, tout va bien. Je sais que l'utilisation de ggsave () fera ce que je veux, mais je me demande simplement pourquoi jpeg () plus dev.off () ne fonctionne pas. J'ai essayé cela avec différentes versions de R et le problème persiste.
Vous devez utiliser ggsave
au lieu de la séquence jpeg(); print(p); dev.off()
. ggsave
est un wrapper qui fait exactement ce que vous avez l'intention de faire avec votre fonction, sauf qu'il offre plus d'options et de polyvalence. Vous pouvez spécifier le type de sortie de manière explicite, par exemple jpg ou pdf, ou il devinera à partir de votre extension de nom de fichier.
Ainsi, votre code pourrait devenir quelque chose comme:
p <- qplot(1:20, 1:20)
ggsave(filename="a.jpg", plot=p)
Voir ?ggsave
pour plus de détails
La raison pour laquelle le comportement d'origine dans votre code n'a pas fonctionné est en effet une question fréquemment posée (sur stackoverlflow ainsi que FAQ R sur CRAN ). Vous devez insérer une instruction print
pour imprimer le tracé. Dans la console interactive, l'impression est exécutée en silence en arrière-plan.
Ces tracés doivent être imprimés:
ff <- function(){
jpeg("a.jpg")
p <- qplot(1:20, 1:20)
print(p)
dev.off()
}
ff()
C'est une erreur très courante .