Comment enregistrer 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 au format PNG ou JPEG, est-il possible de le faire automatiquement? (via le code)

Il y a deux questions différentes: D’abord, je regarde déjà l’insortinggue sur mon moniteur et j’aimerais la sauvegarder telle quelle. Deuxièmement, je n’ai pas encore généré l’insortinggue, mais j’aimerais l’enregistrer directement sur le disque lorsque j’exécute mon code de traçage.

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


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

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

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

    Un exemple de code pour enregistrer le tracé dans un fichier png :

     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 et ?tiff ainsi que dans la page d'aide distincte de ?pdf .

    Notez toutefois que l'image peut être différente sur le disque du même tracé directement tracé sur votre écran, par exemple si vous avez redimensionné la fenêtre à l'écran.


    Notez que si votre tracé est fait par lattice ou ggplot2 vous devez explicitement imprimer le tracé. Voir cette réponse qui explique cela plus en détail et des liens vers la FAQ R: le qplot de ggplot ne s'exécute pas sur le sourcing


    2. Je regarde actuellement un tracé sur mon écran et je souhaite le copier tel quel sur le disque.

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

    Cela devrait copier parfaitement l'image, en respectant tout redimensionnement 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 .

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

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

    Si vous rencontrez un trop grand nombre de fenêtres de tracé dans R, utilisez graphics.off() pour fermer toutes les fenêtres de tracé.

    Si vous utilisez ggplot2 la méthode préférée consiste à utiliser ggsave . Vous devez d’abord tracer, après avoir créé le tracé que vous appelez ggsave :

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

    Le format de l’image est déterminé par l’extension que vous choisissez pour le nom de fichier. Des parameters supplémentaires peuvent être transmis à ggsave , notamment la width , la height et le dpi .

    Comme ça

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

    ou ca

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

    ou ca

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

    Et probablement d’autres aussi. Ils sont tous répertoriés dans les pages d’aide.

    Pour la première question, je trouve que dev.print est le meilleur lorsque je travaille de manière interactive. Tout d’abord, vous configurez votre tracé visuellement et lorsque vous êtes satisfait de ce que vous voyez, vous pouvez demander à R de sauvegarder le tracé actuel sur le disque.

     dev.print(pdf, file="filename.pdf"); 

    Vous pouvez remplacer le pdf par d’autres formats tels que png .

    Cela copiera l’image exactement comme vous le voyez à l’écran. Le problème avec dev.copy est que l’image est souvent différente et ne se souvient pas de la taille de la fenêtre et du rapport hauteur / largeur – cela force le tracé à être carré par défaut.

    Pour la deuxième question, (comme d’autres ont déjà répondu), vous devez diriger la sortie sur le disque avant d’exécuter vos commandes de traçage.

     pdf('filename.pdf') plot( yourdata ) points (some_more_data) dev.off() # to complete the writing process and return output to your monitor 

    Si vous utilisez R Studio http://soffr.miximages.com/r/strong (la meilleure réponse), les fenêtres avec des tracés ne s’ouvriront pas, juste .png, * bmp ou * .pdf les fichiers seront créés. Cela est pratique dans les calculs massifs, car R ne peut gérer qu’un nombre limité de fenêtres graphiques.

    Cependant, si vous voulez voir les tracés et les avoir également enregistrés, appelez savePlot(filename, type) fois les tracés dessinés et la fenêtre qui les contient active.

     plotpath<- file.path(path, "PLOT_name",paste("plot_",file,".png",sep="")) png(filename=plotpath) plot(x,y, main= file) dev.off() 

    Pour append à ces réponses, si vous avez un script R contenant des appels qui génèrent des tracés à l’écran (le périphérique natif), ceux-ci peuvent tous être enregistrés dans un fichier pdf (périphérique par défaut pour un shell non interactif) “Rplots.pdf “(le nom par défaut) en redirigeant le script dans R depuis le terminal (en supposant que vous exécutiez Linux ou OS X), par exemple:

     R < myscript.R --no-save 

    Cela pourrait être converti en jpg / png si nécessaire

    Dans certains cas, on veut à la fois sauvegarder et imprimer un graphique de base. J’ai passé un peu de temps avec cette fonction utilitaire:

     x = 1:10 basesave = function(expr, filename, print=T) { #extension exten = ssortingngr::str_match(filename, "\\.(\\w+)$")[, 2] switch(exten, png = { png(filename) eval(expr, envir = parent.frame()) dev.off() }, {stop("filetype not recognized")}) #print? if (print) eval(expr, envir = parent.frame()) invisible(NULL) } #plots, but doesn't save plot(x) #saves, but doesn't plot png("test.png") plot(x) dev.off() #both basesave(quote(plot(x)), "test.png") #works with pipe too quote(plot(x)) %>% basesave("test.png") 

    Notez qu’il faut utiliser la quote , sinon l’appel de plot(x) est exécuté dans l’environnement global et NULL est transmis à basesave() .

     dev.copy(png,'path/pngFile.png') plot(YData ~ XData, data = mydata) dev.off()