Enregistrer un graphique ggplot en R avec ggsave()
Exportez votre graphique en PNG, PDF, SVG, JPEG ou TIFF — taille et résolution maîtrisées
Apprenez à enregistrer un graphique ggplot2 en R avec ggsave() — choisir le format selon l’extension du fichier, définir la largeur, la hauteur et les unités, contrôler la résolution avec dpi, enregistrer un objet graphique nommé, et utiliser le chemin du périphérique graphique de base pour les PDF multi-pages.
Date de publication
20 juin 2026
Modifié
12 juillet 2026
AstucePoints clés
ggsave() enregistre votre graphique dans un fichier — l’extension du fichier choisit le format (.png, .pdf, .svg, .jpeg, .tiff).
Appelée avec un simple nom de fichier, elle enregistre le dernier graphique affiché ; passez plot = p pour enregistrer plutôt un objet graphique nommé.
Contrôlez la taille de sortie avec width, height et units ("in", "cm", "mm", "px").
Contrôlez la résolution avec dpi — un nombre, ou un préréglage ("print" = 300, "screen" = 72, "retina" = 320).
Pour une sortie vectorielle (nette à toute taille, idéale pour l’impression), enregistrez en .pdf ou .svg ; pour du raster, en .png (sans perte) ou .jpeg.
Le chemin du périphérique graphique de base — pdf() → print(plot) → dev.off() — est l’alternative, et le seul moyen d’écrire un PDF multi-pages.
Chaque graphique ci-dessous est rendu pour vous — puis ajustez n’importe quel exemple en direct dans le bac à sable.
Un graphique n’est utile qu’une fois sorti de votre session R — dans un rapport, une diapositive, un article ou une page web. En R, ggplot2 vous offre une fonction qui gère presque tous les cas : ggsave(). Elle devine le format à partir du nom de fichier, vous laisse définir la taille et la résolution exactes, et enregistre soit le graphique à l’écran, soit n’importe quel objet graphique que vous nommez. Cette leçon couvre tout le flux de travail — format, taille, résolution — puis montre le chemin du périphérique graphique de base auquel vous recourez lorsque vous avez besoin d’un PDF multi-pages. Les figures sont rendues ici même, et vous pouvez ré-exécuter ou modifier n’importe laquelle d’entre elles en direct.
Nous utilisons le jeu de données intégré mtcars : consommation et conception de 32 voitures d’un magazine automobile de 1974. Nous représentons le poids de la voiture (wt, en milliers de livres) par rapport à l’efficacité énergétique (mpg, miles par gallon) — un nuage de points propre à deux variables à enregistrer sur le disque.
Note
Les fichiers de cette leçon sont écrits dans un dossier temporaire afin que les exemples restent autonomes et ne laissent aucun désordre derrière eux. Dans votre propre travail, remplacez tempfile(...) / file.path(tempdir(), ...) par un simple nom de fichier comme "my-plot.png" pour enregistrer dans votre répertoire de travail.
Enregistrer le dernier graphique avec ggsave()
L’appel le plus simple : dessinez un graphique, puis appelez ggsave() avec un simple nom de fichier. ggsave enregistre le graphique affiché en dernier, quel qu’il soit et choisit le format à partir de l’extension du fichier — ici .png.
library(ggplot2)ggplot(mtcars, aes(x = wt, y = mpg)) +geom_point(color ="#3a86d4", size =2.5) +labs(x ="Weight (1000 lbs)", y ="Miles per gallon") +theme_minimal()
# save the plot just displayed; the .png extension selects the PNG formatggsave(file.path(tempdir(), "mtcars.png"))
Enregistrer un objet graphique nommé avec plot =
Se fier au « dernier graphique » est fragile dans un script. Affectez votre graphique à une variable et passez-le explicitement avec plot = — l’enregistrement est désormais sans ambiguïté, peu importe ce qui a été dessiné en dernier.
library(ggplot2)p <-ggplot(mtcars, aes(x = wt, y = mpg)) +geom_point(color ="#3a86d4", size =2.5) +labs(x ="Weight (1000 lbs)", y ="Miles per gallon") +theme_minimal()# save the named object regardless of what was last drawnggsave(file.path(tempdir(), "mtcars-object.png"), plot = p)p
Contrôler la taille : width, height, units
Définissez la taille physique de la figure enregistrée avec width et height, et choisissez leur unité avec units — "in" (pouces, par défaut), "cm", "mm" ou "px" (pixels). C’est ce qui fait qu’un graphique tient exactement dans une colonne, une diapositive ou un cadre d’impression.
library(ggplot2)p <-ggplot(mtcars, aes(x = wt, y = mpg)) +geom_point(color ="#3a86d4", size =2.5) +labs(x ="Weight (1000 lbs)", y ="Miles per gallon") +theme_minimal()# 8 cm wide by 5 cm tallggsave(file.path(tempdir(), "mtcars-8x5cm.png"), plot = p,width =8, height =5, units ="cm")p
Contrôler la résolution : dpi
Pour les formats raster (PNG, JPEG, TIFF), dpi définit la résolution — points par pouce. Passez un nombre, ou l’un des préréglages : "screen" (72), "print" (300, le standard de publication) ou "retina" (320, pour les écrans haute densité). À width/height fixés, un dpi plus élevé produit un fichier image plus grand et plus net.
library(ggplot2)p <-ggplot(mtcars, aes(x = wt, y = mpg)) +geom_point(color ="#3a86d4", size =2.5) +labs(x ="Weight (1000 lbs)", y ="Miles per gallon") +theme_minimal()# print-quality raster: 6 x 4 inches at 300 dpiggsave(file.path(tempdir(), "mtcars-300dpi.png"), plot = p,width =6, height =4, units ="in", dpi =300)p
Choisir le format par l’extension : PNG, PDF, SVG, JPEG, TIFF
Vous ne nommez jamais le format dans le code — vous nommez le fichier, et ggsave fait correspondre le périphérique à l’extension. Le raster (.png, .jpeg, .tiff) fige les pixels à un dpi donné ; le vectoriel (.pdf, .svg) reste parfaitement net à tout niveau de zoom et constitue le bon choix pour l’impression. Enregistrez le même graphique de cinq façons :
La sortie .svg nécessite l’installation du paquet svglite (install.packages("svglite")) ; les autres formats utilisent des périphériques fournis avec R de base. (Le SVG n’est pas disponible dans le bac à sable webR du navigateur, il est donc omis de la cellule exécutable ci-dessus — il fonctionne dans une session R normale.)
Enregistrer en EPS / PostScript (et le piège de la transparence)
De nombreuses revues et flux de travail LaTeX demandent encore les figures au format vectoriel EPS (Encapsulated PostScript). ggsave() en écrit une dès que vous nommez un fichier .eps (ou .ps) — elle recourt au périphérique postscript de R de base. Un piège surprend presque tout le monde : EPS/PostScript ne peut pas rendre la transparence. Tout alpha dans votre graphique — points semi-transparents, ruban estompé, remplissage translucide — est silencieusement aplati.
Enregistrez en .eps un graphique qui utilisealpha et ggsave avertit semi-transparency is not supported on this device — elle écrit tout de même le fichier, mais la transparence a disparu. Vous pouvez confirmer cette limitation directement : dev.capabilities()[["semiTransparency"]] renvoie FALSE pour le périphérique postscript.
La solution est le périphérique cairo_ps, qui prend bien en charge la semi-transparence — passez-le à ggsave() avec device = cairo_ps. Le seul compromis, signalé dans la documentation des périphériques graphiques Cairo de R : recourir à la transparence amène cairo_ps à intégrer ces régions sous forme de bitmap, si bien que la sortie n’est plus purement vectorielle — définissez la résolution de ce bitmap avec fallback_resolution (en dpi, p. ex. 300 pour l’impression). C’est le coût honnête du maintien de l’alpha — si votre figure n’a aucune transparence, le simple périphérique .eps reste entièrement vectoriel et constitue le meilleur choix.
library(ggplot2)# a plot that USES transparency (alpha) on overlapping pointsp <-ggplot(mtcars, aes(x = wt, y = mpg)) +geom_point(color ="#3a86d4", alpha =0.4, size =4) +labs(x ="Weight (1000 lbs)", y ="Miles per gallon") +theme_minimal()# Default EPS -> base R's postscript device: NO transparency.# ggsave warns "semi-transparency is not supported on this device"# and flattens the alpha; the file is still written (pure vector).ggsave(file.path(tempdir(), "mtcars.eps"), plot = p, width =6, height =4)# Fix: the cairo PostScript device keeps the transparency.# fallback_resolution sets the dpi of the rasterised transparent regions.ggsave(file.path(tempdir(), "mtcars-cairo.eps"), plot = p,width =6, height =4, device = cairo_ps, fallback_resolution =300)
Nommer le fichier .eps sélectionne le périphérique postscript de base — comme passer explicitement device = "eps" ou device = "ps" (la chaîne "postscript" n’est pas un périphérique ggsave() valide — utilisez "ps", ou passez la fonction postscript sans guillemets) ; les deux suppriment la transparence. Seul device = cairo_ps la préserve.
Le chemin du périphérique graphique de base : pdf() → print() → dev.off()
Avant ggsave(), R enregistrait tout graphique en ouvrant un périphérique, en dessinant dedans, puis en le fermant. Cela fonctionne toujours et mérite d’être connu : ouvrez le périphérique de votre format avec pdf(), png(), svg(), tiff() ou jpeg() (en le dimensionnant avec width/height), faites print() du graphique, puis appelez dev.off() pour vider le fichier sur le disque.
library(ggplot2)p <-ggplot(mtcars, aes(x = wt, y = mpg)) +geom_point(color ="#3a86d4", size =2.5) +labs(x ="Weight (1000 lbs)", y ="Miles per gallon") +theme_minimal()pdf(file.path(tempdir(), "mtcars-device.pdf"), width =6, height =4) # open the PDF deviceprint(p) # draw into itdev.off() # close → write the file
quartz_off_screen
2
p
Pour exporter des graphiques R de base (non-ggplot) et lattice, le chemin du périphérique est la seule option — c’est traité dans Créer et enregistrer des graphiques (R de base). Notez que les périphériques png()/jpeg()/tiff() se dimensionnent en pixels par défaut (définissez units = "in" + res = pour des pouces à une résolution), tandis que pdf()/svg() se dimensionnent en pouces.
PDF multi-pages : plusieurs graphiques, un par page
Seul le périphérique PDF peut contenir plus d’une page. Ouvrez pdf() une fois, faites print() de plusieurs graphiques — chaque print() démarre une nouvelle page — puis dev.off(). C’est la façon standard d’enregistrer tout un lot de figures dans un seul document partageable.
library(ggplot2)p1 <-ggplot(mtcars, aes(x = wt, y = mpg)) +geom_point(color ="#3a86d4", size =2.5) +labs(x ="Weight (1000 lbs)", y ="Miles per gallon", title ="Weight vs MPG") +theme_minimal()p2 <-ggplot(mtcars, aes(x = hp, y = mpg)) +geom_point(color ="#3a86d4", size =2.5) +labs(x ="Horsepower", y ="Miles per gallon", title ="Horsepower vs MPG") +theme_minimal()pdf(file.path(tempdir(), "mtcars-report.pdf"), width =6, height =4)print(p1) # page 1print(p2) # page 2dev.off()
quartz_off_screen
2
p2
Essayez en direct
Les graphiques ci-dessus ont été rendus au moment de la construction. Envie d’expérimenter ? Modifiez le code et appuyez sur Run — il s’exécute dans votre navigateur via webR (sans serveur, sans installation).
Vous travaillez en Python ? Un guide d’export savefig() / matplotlib arrive dans la série Python.
🟢 Avec un agent IA
Demandez à Prova« quelles largeur, hauteur et dpi dois-je utiliser pour exporter ce graphique pour une revue à deux colonnes à 300 dpi ? » — elle répond avec du code ggsave() que vous pouvez exécuter, de sorte que la recommandation est reproductible. The runtime is the judge.Demander à Prova →
Questions fréquentes
NoteComment enregistrer un graphique ggplot dans un fichier en R ?
Appelez ggsave("myplot.png") juste après avoir dessiné un graphique — elle enregistre le dernier graphique affiché et choisit le format à partir de l’extension du fichier. Pour un script, enregistrez explicitement un objet nommé avec ggsave("myplot.png", plot = p).
NoteComment définir la taille d’un graphique ggplot enregistré ?
Utilisez les arguments width et height avec units — "in" (par défaut), "cm", "mm" ou "px". Par exemple ggsave("p.png", plot = p, width = 8, height = 5, units = "cm") écrit une figure de 8 × 5 cm.
NoteComment exporter un graphique ggplot en haute résolution pour l’impression ?
Réglez dpi = 300 (le standard de publication) sur un format raster comme PNG ou TIFF : ggsave("p.png", plot = p, width = 6, height = 4, dpi = 300). Vous pouvez aussi passer les préréglages "print" (300), "screen" (72) ou "retina" (320).
NoteQuelle est la différence entre enregistrer un graphique ggplot en PNG et en PDF ?
Le PNG est un format raster qui fige les pixels à un dpi fixe, tandis que le PDF (comme le SVG) est vectoriel et reste parfaitement net à tout niveau de zoom. Choisissez .pdf ou .svg pour l’impression, et .png pour une image d’écran ou web sans perte — vous sélectionnez l’un ou l’autre simplement en nommant l’extension du fichier.
NoteComment enregistrer plusieurs graphiques ggplot dans un seul PDF ?
Utilisez le chemin du périphérique graphique de base : ouvrez le périphérique une fois avec pdf("report.pdf"), faites print() de chaque graphique (chaque print() démarre une nouvelle page), puis fermez-le avec dev.off(). Seul le périphérique PDF peut contenir plus d’une page — ggsave() écrit une seule page.
NoteComment enregistrer un graphique ggplot en EPS avec transparence ?
L’enregistrement .eps par défaut utilise le périphérique postscript de R de base, qui ne gère pas la transparence — il avertit semi-transparency is not supported on this device et aplatit tout alpha. Passez plutôt le périphérique cairo : ggsave("plot.eps", plot = p, device = cairo_ps). Notez que cairo intègre les régions transparentes sous forme de bitmap, de sorte que l’EPS n’est plus purement vectoriel ; supprimez l’alpha si vous avez besoin d’un fichier entièrement vectoriel.
Testez vos connaissances
ImportantExercice : enregistrer en PDF de qualité impression
Complétez l’appel pour que le graphique soit enregistré en PDF de 6 × 4 pouces nommé figure.pdf dans le dossier temporaire.
# Set width = 6, height = 4 and units = "in". The .pdf extension already picks the format.
Vous avez enregistré un graphique ggplot2 avec ggsave() — en laissant l’extension du fichier choisir le format, en enregistrant un objet graphique nommé avec plot =, en dimensionnant la sortie avec width/height/units, et en réglant la résolution avec dpi. Vous avez aussi découvert le chemin du périphérique graphique de base (pdf() → print() → dev.off()), la voie vers un PDF multi-pages. Ensuite, apprenez à combiner plusieurs graphiques en une seule figure avant l’enregistrement, ou peaufinez les titres et légendes de figure d’un graphique avant l’export.
Cette leçon est reproductible : les figures sont exécutées au moment de la construction (si elles s’affichent, le code fonctionne), et le bac à sable et le quiz se réexécutent en direct dans votre navigateur. The runtime is the judge.
@online{2026,
author = {},
title = {Enregistrer un graphique ggplot en R avec ggsave()},
date = {2026-06-20},
url = {https://www.datanovia.com/learn/data-visualization/ggplot2/save-ggsave},
langid = {fr}
}