IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Etiquettes non régulières sur un axe


Sujet :

R

  1. #1
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut Etiquettes non régulières sur un axe
    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 ?

  2. #2
    Membre actif
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 296
    Points
    296
    Par défaut
    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 : 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 incorrect
    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"))
    Error: Breaks and labels have unequal lengths
    Code correct
    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"))
    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
    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)
    Nom : ticks_breaks_annotations.png
Affichages : 465
Taille : 6,2 Ko

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2015
    Messages : 101
    Points : 70
    Points
    70
    Par défaut
    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 :
    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=1 pour l'axe des (x)
    side=2 pour (y)
    at= quelles sont les valeurs à afficher
    labels= quoi afficher

    Voici un exemple :

    Nom : exemple.png
Affichages : 462
Taille : 22,4 Ko

  4. #4
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par Lou.lou Voir le message
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    axis(side=1, at=c(10, 15, 23), labels=c("10","15","23") )
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    axis(side=1,at=seq(10,33),labels=c(10,'','','','',15,'','','','','','','',23,'','','','','','','','','',''))
    Mais j'ai un petit trait pour toutes les graduations, et non uniquement sur les graduations paires.

  5. #5
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut
    Ça y est, j'ai résolu mon problème.
    Voici le code :
    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)
    - La fonction plot affiche mon graphique sans les axes (option axes=FALSE, merci Lou.lou)
    - 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

  6. #6
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2015
    Messages : 101
    Points : 70
    Points
    70
    Par défaut
    Je suis heureux de voir que j'ai pu vous être utile.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/11/2012, 15h19
  2. Réponses: 2
    Dernier message: 05/08/2008, 16h43
  3. Ouvrir une popup non redimensionnable sur clique
    Par magic8392 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 14/09/2005, 09h44
  4. 'undefined' non interceptable sur 'eval' ?
    Par Johnny Ryall dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/06/2005, 11h28
  5. Bip non sollicité sur les Edit
    Par David dans le forum Composants VCL
    Réponses: 2
    Dernier message: 09/09/2003, 20h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo