Je trace une régression linéaire simple à l'aide de R. Je souhaite enregistrer cette image au format PNG ou JPEG. Est-il possible de le faire automatiquement? (via code)
Il y a deux questions différentes: premièrement, je regarde déjà l'intrigue sur mon moniteur et je voudrais l'enregistrer tel quel. Deuxièmement, je n'ai pas encore généré l'intrigue, 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.
Pour enregistrer un tracé, vous devez procéder comme suit:
png()
, bmp()
, pdf()
ou similaire.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 pour _?pdf
_.
Notez toutefois que l'image sur le disque peut paraître différente du même tracé directement tracé à votre écran, par exemple si vous avez redimensionné la fenêtre à l'écran.
Notez que si votre tracé est créé avec lattice
ou _ggplot2
_, vous devez l’imprimer explicitement. Voir cette réponse qui explique cela plus en détail et qui contient également des liens vers la FAQ R: qplot de ggplot ne s’exécute pas à la source
_dev.print(pdf, 'filename.pdf')
_
Cela devrait parfaitement copier l'image, en respectant le redimensionnement que vous avez effectué dans la fenêtre interactive. Vous pouvez, comme dans la première partie de cette réponse, remplacer pdf
par d'autres types de fichiers tels que png
.
Si vous voulez continuer à voir le tracé en R, une autre option consiste à utiliser dev.copy
:
X11 ()
plot (x,y)
dev.copy(jpeg,filename="plot.jpg");
dev.off ();
Si vous rencontrez trop 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 de sauvegarde préférée consiste à utiliser ggsave
. Vous devez d’abord tracer, après avoir créé le tracé, 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 paramètres supplémentaires peuvent être passés à ggsave
, notamment width
, height
et 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 énumérés ensemble dans les pages d'aide.
Pour la première question, je trouve que dev.print
est le meilleur lorsque vous travaillez 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 pdf
par d'autres formats tels que png
.
Cela copie l'image exactement telle que vous la 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 ni du rapport de format - elle oblige 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://rstudio.org/ , un menu spécial vous permet d'enregistrer votre tracé dans le format de votre choix et à la résolution de votre choix.
Si vous ouvrez un appareil en utilisant png()
, bmp()
, pdf()
etc. comme suggéré par Andrie (la meilleure réponse), les fenêtres avec des tracés ne s'ouvriront pas, seuls les fichiers * .png, * bmp ou * .pdf seront créés. Ceci est pratique dans les calculs massifs, car R ne peut gérer qu'un nombre limité de fenêtres graphiques.
Toutefois, si vous souhaitez voir les tracés et les enregistrer, appelez savePlot(filename, type)
une fois que les tracés ont été dessinés et que la fenêtre qui les contient est active.
plotpath<- file.path(path, "PLOT_name",paste("plot_",file,".png",sep=""))
png(filename=plotpath)
plot(x,y, main= file)
dev.off()
Dans certains cas, on souhaite à la fois enregistrer et imprimer un tracé de base. J'ai passé un peu de temps et suis venu avec cette fonction utilitaire:
x = 1:10
basesave = function(expr, filename, print=T) {
#extension
exten = stringr::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 que vous devez utiliser quote
, sinon l'appel plot(x)
est exécuté dans l'environnement global et NULL
est transmis à basesave()
.
Pour ajouter à ces réponses, si vous avez un script R contenant des appels générant des tracés à l'écran (le périphérique natif), vous pouvez alors tous les enregistrer dans un fichier pdf (le périphérique par défaut pour un shell non interactif) "Rplots.pdf "(le nom par défaut) en redirigeant le script vers R depuis le terminal (en supposant que vous utilisez Linux ou OS X), par exemple:
R < myscript.R --no-save
Cela pourrait être converti en jpg/png si nécessaire
dev.copy(png,'path/pngFile.png')
plot(YData ~ XData, data = mydata)
dev.off()