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 éclairé
    Inscrit en
    Novembre 2003
    Messages
    554
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 554
    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 expérimenté
    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
    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 : 482
Taille : 6,2 Ko

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

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2015
    Messages : 101
    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 : 479
Taille : 22,4 Ko

  4. #4
    Membre éclairé
    Inscrit en
    Novembre 2003
    Messages
    554
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 554
    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 éclairé
    Inscrit en
    Novembre 2003
    Messages
    554
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 554
    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 confirmé
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2015
    Messages : 101
    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