
Cet article a d’abord été publié le 29 août 2020 sur l’ancien blog . Nous pensons qu’il a été utile aux utilisateurs de R et avons décidé de revoir son contenu et de le traduire en français sur notre nouveau blog.
Contexte
Si vous utilisez les graphiques de base de R pour vos graphiques et que vous aimez les personnaliser, vous vous êtes peut-être déjà demandé comment personnaliser les graduations ! Je le fais régulièrement et je me suis dit qu’il serait utile d’expliquer comment je procède. Considérons le graphique suivant :
| |

Par défaut, plot.default a ses propres heuristiques où les graduations
doivent être placées. C’est toujours un bon choix par défaut, mais parfois
ce n’est pas celui que vous recherchez. Heureusement, le package de base
graphics inclut tout ce dont vous avez besoin pour personnaliser les
graduations, alors, personnalisons nos graduations !
Supprimer les axes et les rajouter
La première étape consiste à supprimer tous les axes. Il existe essentiellement
deux façons de procéder. La première est d’utiliser xaxt = "n" et yaxt = "n"
pour supprimer sélectivement l’axe des x et l’axe des y, respectivement.
| |

| |

L’autre approche est de mettre axes à FALSE dans plot() :
| |

Comme vous pouvez le voir, lorsque axes = FALSE, le cadre est également
supprimé. Vous pouvez le rajouter avec box() :
| |

et changer son style au besoin :
| |

Cela dit, supprimons seulement l’axe des x pour le moment et ajoutons des
graduations à 0, 0.5, 1, 1.5 et 2 sur l’axe des x en utilisant axis() :
| |

Je peux facilement changer les étiquettes si les valeurs sur l’axe ne sont pas celles qui devraient être affichées, par exemple :
| |

Deuxième ensemble de graduations
Maintenant, ajoutons un deuxième ensemble de graduations ! Cela peut se faire
en appelant axis() une fois de plus.
| |

Comme vous l’avez peut-être remarqué, setdiff() est utilisé pour sélectionner
l’ensemble complémentaire de graduations. L’approche est simple : définir
toutes les positions de graduations avec seq() (ici avec un pas de 0.1),
définir les graduations principales, et utiliser setdiff() pour obtenir les
positions restantes. Comme ces graduations mineures n’ont pas besoin
d’étiquettes, je définis labels = NA.
Supprimer la ligne supplémentaire
La principale raison pour laquelle j’ajuste les graduations sur mes graphiques
est d’éviter les lignes qui se superposent. axis() et box() dessinent tous
deux des lignes qui se chevauchent partiellement, c’est également vrai avec le
comportement par défaut de plot(). Les lignes qui accompagnent les graduations
| |

se superposent avec le cadre
| |

Cela peut souvent passer inaperçu, mais personnellement j’ai tendance à
remarquer ces superpositions et ça m’agace… Quoi qu’il en soit, une façon de
gérer cela est de définir l’épaisseur de ligne à 0 dans axis().
| |

puis de définir l’épaisseur de ligne des graduations, contrôlée par
lwd.ticks, à une valeur supérieure à 0
| |

Notez que si vous souhaitez uniquement supprimer les graduations, vous pouvez
utiliser tick = FALSE.
| |

Mais si vous voulez simplement vous débarrasser de la ligne supplémentaire,
mais pas des graduations, alors vous devez définir lwd à 0 et lwd.ticks
à une valeur positive.
Personnaliser les graduations
Après avoir effectué les étapes ci-dessus, vous avez peut-être réalisé
qu’ajuster finement lwd.ticks permet de personnaliser vos graduations.
| |

Un deuxième paramètre pour personnaliser davantage les graduations est tck,
qui est ajusté avec par() :
| |

ou bien avec axis() (grâce aux points de suspension
...), ce qui me permet de le changer uniquement pour un ensemble de
graduations
| |

De plus, en utilisant une valeur positive, vous pouvez faire pointer les graduations vers l’intérieur !
| |

Enfin, vous pouvez modifier de nombreux aspects, y compris leur couleur et leur type de ligne :
| |

Une dernière astuce : si vous devez ajuster la position des graduations, vous
devrez utiliser mgp (également documenté dans par), qui est un vecteur de
trois éléments contrôlant les caractéristiques suivantes :
- la position des étiquettes d’axe,
- la position des étiquettes de graduations,
- la position des graduations.
| |

Notez que, tout comme pour tck, je peux utiliser mgp dans axis(). Dans
cet exemple, cela n’affectera pas les étiquettes d’axe car elles ont été
ajoutées par plot().
| |

Tout rassembler dans une fonction
Toutes les étapes ci-dessus peuvent sembler complexes au début. Mais une fois que vous serez à l’aise, vous réaliserez que la plupart des graphiques nécessitent d’ajuster les mêmes paramètres, et vous pourrez les encapsuler dans une fonction qui répond à vos besoins. Par exemple, j’utilise souvent une fonction similaire à celle ci-dessous :
| |
qui rend essentiellement la personnalisation des graduations très facile !
| |

Une note à propos de ggplot2
Vous vous demandez peut-être pourquoi cet article se concentre sur les
graphiques de base plutôt que sur ggplot2. C’est tout simplement que le sujet
est bien couvert, par exemple:
- Cet article issu de la documentation du paquet : Annotation log ticks
- Ce billet de blog sur STHDA : ggplot2 axis ticks: a guide to customize tick marks and labels
Informations de session
Ceci fournit les informations sous lesquelles l’article a été rendu.
| |
R version 4.5.2 (2025-10-31)
Platform: x86_64-pc-linux-gnu
Running under: Ubuntu 25.10
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
time zone: America/New_York
tzcode source: system (glibc)
attached base packages:
[1] stats graphics grDevices datasets utils methods base
loaded via a namespace (and not attached):
[1] vctrs_0.7.1 cli_3.6.5 knitr_1.51
[4] rlang_1.1.7 xfun_0.56 otel_0.2.0
[7] processx_3.8.6 targets_1.11.4 jsonlite_2.0.0
[10] data.table_1.18.2.1 glue_1.8.0 prettyunits_1.2.0
[13] backports_1.5.0 htmltools_0.5.9 ps_1.9.1
[16] rmarkdown_2.30 evaluate_1.0.5 tibble_3.3.1
[19] fastmap_1.2.0 base64url_1.4 yaml_2.3.12
[22] lifecycle_1.0.5 compiler_4.5.2 codetools_0.2-20
[25] igraph_2.2.1 pkgconfig_2.0.3 digest_0.6.39
[28] R6_2.6.1 tidyselect_1.2.1 pillar_1.11.1
[31] callr_3.7.6 magrittr_2.0.4 tools_4.5.2
[34] secretbase_1.1.1 bspm_0.5.7
Vous avez un sujet en tête ou souhaitez rester informé de notre travail?
Faites-nous signe!