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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager