Bonjour,
Je souhaiterais dessiner un axe, gradué de 10 à 33, sur lequel figurent de petits traits sur chaque entier pair, et des étiquettes aux seules graduations 10, 15, et 23.
Est-ce faisable simplement, comment ?
Bonjour,
Je souhaiterais dessiner un axe, gradué de 10 à 33, sur lequel figurent de petits traits sur chaque entier pair, et des étiquettes aux seules graduations 10, 15, et 23.
Est-ce faisable simplement, comment ?
Bonjour,
Avec ggplot2, il s'agit d'accomplir deux tâches : personnaliser l'aspect esthétique, ici les traits d'un axe (voir cette page et celle-là) ainsi qu'annoter le graphique. Une des deux tâches peut être faite indépendamment de l'autre mais pour faire les deux à la fois, il faut nécessairement que le nombre de traits soit égal à celui des étiquettes.
Données
Code incorrect
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 exemple <- list(X = seq(10L, 33L)) exemple$Y <- rep(0L, length(exemple$X)) exemple <- as.data.frame(exemple)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ggplot(exemple, aes(x = X, y = Y)) + geom_blank() + scale_x_continuous(breaks = exemple$X[exemple$X %% 2L == 0L], labels = c("Et-10", "Et-15", "Et-23"))Code correctError: Breaks and labels have unequal lengths
Mais cela ne correspond visiblement pas à ce que vous cherchez. Alors, en séparant les deux tâches, on peut tracer sur l'axe autant de traits et de la manière qu'on veut, puis annoter le graphique obtenu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ggplot(exemple, aes(x = X, y = Y)) + geom_blank() + scale_x_continuous( breaks = c(10L, 15L, 23L), labels = c("Et-10", "Et-15", "Et-23"))
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 générer_traits <- function(limites_axe) { tmp <- seq(as.integer(limites_axe[1L]) - 1L, as.integer(limites_axe[2L]) - 1L) return(tmp[tmp %% 2L == 0L]) } fct_grad_axe <- function(données, fct_endroits_traits, annotations, ordonnées, abscisse, épaisseur, couleur) { stopifnot(require(ggplot2)) ggplot(data = données, aes(x = X, y = Y)) + geom_blank() + scale_x_continuous(breaks = fct_endroits_traits) + annotate("text", label = annotations, x = ordonnées, y = rep(abscisse, length(ordonnées)), size = épaisseur, color = couleur) } résultat <- fct_grad_axe(exemple, générer_traits, c("Et-10", "Et-15", "Et-23"), c(10, 15, 23), -0.03, 4, "blue") + theme_classic() print(résultat)![]()
Il me semble que enicnath souhaite juste que les valeurs 10 15 et 23 apparaissent sur l'axe des (x) "je suppose".
Pour cela tu peux essayer cela :
Lorsque tu crées ton plot, tu élimines les axes en ajoutant l'argument axes=F, puis tu construis tes axes comme tu le souhaites, avec la fonction axis :
side=1 pour l'axe des (x)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 axis(side=1, at=c(10, 15, 23), labels=c("10","15","23") )
side=2 pour (y)
at= quelles sont les valeurs à afficher
labels= quoi afficher
Voici un exemple :
![]()
En fait, ça marche presque.
J'ai bien supprimé toutes les étiquettes avec l'option axes=F, puis je rajoute mes étiquettes 10, 15 et 23 comme ceci :
Mais j'ai un petit trait pour toutes les graduations, et non uniquement sur les graduations paires.
Code : Sélectionner tout - Visualiser dans une fenêtre à part axis(side=1,at=seq(10,33),labels=c(10,'','','','',15,'','','','','','','',23,'','','','','','','','','',''))
Ça y est, j'ai résolu mon problème.
Voici le code :- La fonction plot affiche mon graphique sans les axes (option axes=FALSE, merci Lou.lou)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 plot( ... , axes=FALSE) axis(side=1,at=seq(10,32,by=2),labels=rep(' ',12)) axis(side=1,at=c(10,15,23),tick=FALSE)
- Puis appel de la fonction axis pour dessiner les petits traits tous les entiers pairs et remplacement du libellé par un espace
- Puis nouvel appel de la fonction axis pour ne mettre que les étiquettes 10, 15, 23, sans les petits traits (option tick=FALSE)
Merci à tous
Je suis heureux de voir que j'ai pu vous être utile.
Partager