Comment sauvegarder un graphique 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? (code via)
il y a deux questions différentes: D'abord, je suis déjà en train de regarder l'intrigue sur mon moniteur et je voudrais la sauver telle quelle. Deuxièmement, je n'ai pas encore généré le tracé, mais je voudrais le sauvegarder directement sur le disque lorsque j'exécute mon code de pointage.
11 réponses
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 dois-je l'enregistrer sur le disque?
pour sauvegarder une parcelle, vous devez faire ce qui suit:
- ouvrir un dispositif, en utilisant
png()
,bmp()
,pdf()
ou similaire - track your model
- fermer le dispositif utilisant
dev.off()
un exemple de code pour sauvegarder la parcelle 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 séparée pour ?pdf
.
notez cependant que l'image peut sembler différente sur le disque à la même parcelle directement tracée à votre l'écran, par exemple si vous avez redimensionné la fenêtre à l'écran.
notez que si votre parcelle est faite par lattice
ou ggplot2
vous devez imprimer explicitement la parcelle. Voir cette réponse qui explique cela plus en détail et aussi des liens vers la FAQ R: qplot de ggplot n'exécute pas sur le sourcing
2. Je suis actuellement en train de regarder un complot sur mon écran et je pour le copier, de "tel quel" sur le disque.
dev.print(pdf, 'filename.pdf')
cela devrait copier l'image parfaitement, en respectant tout redimensionnement que vous avez fait à 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 la parcelle en 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 fouillis de trop de fenêtres de parcelle dans R, Utilisez graphics.off()
pour fermer toutes les fenêtres de parcelle.
si vous utilisez ggplot2
le moyen préféré d'économiser est d'utiliser ggsave
. Tout d'abord, vous devez tracer, après la création de la parcelle 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 du fichier. Des paramètres supplémentaires peuvent être passés à ggsave
, notamment width
, height
, et dpi
.
comme ceci
png('filename.png')
# make plot
dev.off()
ou ce
# sometimes plots do better in vector graphics
svg('filename.svg')
# make plot
dev.off()
ou ce
pdf('filename.pdf')
# make plot
dev.off()
Et probablement d'autres aussi. Ils sont tous listés dans les pages d'aide.
pour la première question, je trouve que dev.print
est le meilleur quand on travaille de façon interactive. Tout d'abord, vous configurez votre parcelle visuellement et lorsque vous êtes satisfait de ce que vous voyez, vous pouvez demander à R de sauvegarder la parcelle actuelle sur le disque
dev.print(pdf, file="filename.pdf");
vous pouvez remplacer pdf
par png
.
cela copiera l'image exactement comme vous la voyez à l'écran. Le problème avec dev.copy
, c'est que l'image est souvent différente et ne se souvient pas de la taille de la fenêtre et le rapport d'aspect - il 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 pointage
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/ il y a un menu spécial pour vous sauver tracer comme n'importe quel format que vous aimez et à n'importe quelle résolution vous choisissez
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 parcelles ne pop up ouvert, juste *.png, *bmp ou *.les fichiers pdf seront créés. Cela est pratique dans les calculs massifs, puisque R ne peut gérer qu'un nombre limité de fenêtres graphiques.
cependant, si vous voulez voir les parcelles et les faire sauvegarder, appelez savePlot(filename, type)
après les parcelles sont tirés et la fenêtre contenant est active.
plotpath<- file.path(path, "PLOT_name",paste("plot_",file,".png",sep=""))
png(filename=plotpath)
plot(x,y, main= file)
dev.off()
pour ajouter à 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), alors ceux-ci peuvent tous être sauvegardés 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
cette valeur peut être convertie en jpg/png si nécessaire
dans certains cas, on veut à la fois sauvegarder et imprimer un tracé de base R. J'ai passé un peu de temps et j'ai trouvé 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 qu'il faut utiliser quote
, sinon l'appel plot(x)
est lancé dans l'environnement global et NULL
passe à basesave()
.
dev.copy(png,'path/pngFile.png')
plot(YData ~ XData, data = mydata)
dev.off()