329 votes

Comment sauvegarder un tracé en tant qu'image sur le disque ?

Je trace une régression linéaire simple en utilisant R. Je voudrais enregistrer cette image en PNG ou JPEG, est-il possible de le faire automatiquement (via le code) ?

Il y a deux questions différentes : Premièrement, je regarde déjà le graphique sur mon écran et je voudrais le sauvegarder tel quel. Deuxièmement, je n'ai pas encore généré le tracé, mais je voudrais l'enregistrer directement sur le disque lorsque j'exécute mon code de traçage.

1 votes

Peut-être faudrait-il modifier cette question pour qu'elle porte sur deux scénarios distincts : Premièrement, vous travaillez peut-être de manière interactive et vous avez créé une belle parcelle que vous souhaitez sauvegarder. Ou, deuxièmement, vous n'avez pas encore vu de tracé et vous voulez l'écrire directement sur le disque sans le regarder d'abord - cela aurait du sens si vous écriviez un script pour générer de nombreux tracés pour vous. Je vais l'éditer maintenant

405voto

Andrie Points 66979

Il y a deux questions étroitement liées, et une réponse pour chacune d'elles.


1. Une image sera générée à l'avenir dans mon script, comment puis-je la sauvegarder sur le disque ?

Pour sauvegarder un tracé, vous devez procéder comme suit :

  1. Ouvrez un appareil, en utilisant png() , bmp() , pdf() ou similaire
  2. Tracez votre modèle
  3. Fermez le dispositif en utilisant dev.off()

Quelques exemples de code pour sauvegarder le tracé dans un fichier png fichier :

fit <- lm(some ~ model)

png(filename="your/file/location/name.png")
plot(fit)
dev.off()

Ceci est décrit dans la page d'aide (combinée) pour les formats graphiques. ?png , ?bmp , ?jpeg y ?tiff ainsi que dans la page d'aide séparée pour ?pdf .

Notez toutefois que l'image peut avoir un aspect différent sur le disque par rapport au même tracé directement sur votre écran, par exemple si vous avez redimensionné la fenêtre à l'écran.


Notez que si votre parcelle est réalisée par lattice o ggplot2 vous devez imprimer explicitement le tracé. Voir cette réponse qui explique cela plus en détail et qui renvoie également à la FAQ R : Le qplot de ggplot ne s'exécute pas lors du sourcing


2. Je suis en train de regarder un graphique sur mon écran et je veux le copier tel quel sur le disque.

dev.print(pdf, 'filename.pdf')

Cela devrait copier l'image parfaitement, en respectant tout redimensionnement que vous avez effectué sur la fenêtre interactive. Vous pouvez, comme dans la première partie de cette réponse, remplacer pdf avec d'autres types de fichiers tels que png .

5 votes

Si vous ne définissez pas le chemin, comme png(filename="nom.png"), vous pouvez connaître le répertoire de sauvegarde avec getwd()

2 votes

J'ai étendu cette réponse pour y inclure une référence à dev.print . Il y a deux questions étroitement liées qui, à mon avis, appellent des réponses différentes. La deuxième sous-question est essentiellement "Comment puis-je sauvegarder une image que j'ai déjà tracée sur mon écran ?". Je m'excuse si ma rédaction n'est pas très bonne, n'hésitez pas à l'améliorer.

0 votes

Comment faire lorsque R demande une "Sélection" ? Par exemple, si j'utilise m3=garchFit(~arma(3,0)+garch(1,1)) y plot(m3) .

88voto

Itamar Points 1112

Si vous voulez continuer à voir le tracé dans R, une autre option est d'utiliser dev.copy :

X11 ()
plot (x,y)

dev.copy(jpeg,filename="plot.jpg");
dev.off ();

Si vous atteignez un encombrement de trop de fenêtres de tracé dans R, utilisez graphics.off() pour fermer toutes les fenêtres de l'intrigue.

2 votes

Excellente réponse ! Cela vous permet d'expérimenter les tracés via X, jusqu'à ce que vous soyez satisfait des résultats, puis de les enregistrer sur place. C'est généralement le mode de fonctionnement le plus pratique.

3 votes

dev.print est meilleur car il copie exactement l'image de l'écran. dev.copy force chaque image à être carrée par défaut. C'est frustrant si vous avez tout configuré de manière interactive.

5 votes

J'utilise dev.print() avec les paramètres de largeur et de hauteur pour définir les dimensions, par ex. dev.copy(device = png, filename = 'MyPlot.png', width = 1000, height = 500) dev.off()

82voto

Paul Hiemstra Points 28390

Si vous utilisez ggplot2 la manière préférée de sauvegarder est d'utiliser ggsave . Tout d'abord, vous devez tracer, après la création de la parcelle, vous appelez ggsave :

ggplot(...)
ggsave("plot.png")

Le format de l'image est déterminé par l'extension que vous choisissez pour le nom du fichier. Des paramètres supplémentaires peuvent être passés à ggsave notamment width , height et dpi .

0 votes

Cela fonctionne bien dans une boucle, dev.off n'a pas fonctionné pour moi.

0 votes

L'avantage est que l'API est cohérente et qu'il n'est pas nécessaire d'activer ou de désactiver des appareils.

1 votes

Contrairement aux solutions avec dev cette solution fonctionnait sur une machine virtuelle sans périphériques graphiques.

31voto

Owen Points 14439

Comme ceci

png('filename.png')
# make plot
dev.off()

ou ceci

# sometimes plots do better in vector graphics
svg('filename.svg')
# make plot
dev.off()

ou ceci

pdf('filename.pdf')
# make plot
dev.off()

Et probablement d'autres aussi. Ils sont tous listés ensemble dans les pages d'aide.

0 votes

Existe-t-il un moyen pour R de déduire l'extension du fichier automatiquement (c'est-à-dire sur la base de la fonction) ? Il semble fastidieux de devoir changer le nom du fichier ainsi que la fonction utilisée.

8voto

Si vous utilisez R Studio http://rstudio.org/ un menu spécial permet de sauvegarder votre tracé dans le format de votre choix et à la résolution de votre choix.

4 votes

Cela existe également dans l'interface graphique de R sous Windows, du moins.

0 votes

Parfois cela échoue mystérieusement pour moi, mais appeler une fonction fonctionne toujours

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