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 :

Ajout données sur histogrammes / ggplot


Sujet :

R

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Physicienne Médicale
    Inscrit en
    Mai 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Physicienne Médicale

    Informations forums :
    Inscription : Mai 2019
    Messages : 32
    Points : 25
    Points
    25
    Par défaut Ajout données sur histogrammes / ggplot
    Bonjour,

    Je suis en train de réaliser des histogrammes pour différentes données d'une colonne (colonne = Acte) contenues dans une table (table = RECUEIL).
    Je souhaiterai écrire, pour chaque histogramme, une valeur du quantile de ces données filtrées par Acte, et ce toujours au même endroit sur le graphe (par exemple en haut à droite).
    1/ comment écrire cette valeur sur mon histogramme
    2/ comment faire pour que les coordonnées du texte écrit soit toujours au même endroit, mêmes si les valeurs de l'histogrammes varient (en x et en y) selon Acte.

    Voici mon code :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    # Boucle pour tous les actes
     
    for (cet_acte in unique(RECUEIL$Acte)){
     
    DFacte <- RECUEIL[RECUEIL$Acte==cet_acte,]
     
     
    # Création de l’HISTOGRAMME:
     
    ggplot(DFacte)  +  
    aes(x=PDS_Total_corrigé_Gy.cm2) +
    geom_histogram(alpha=0.7, fill="white", color="black", bins=30) +
    ggtitle(chartr("_", " " ,cet_acte)) + xlab("Produit Dose Surface (Gy.cm²)") + ylab("Nombre de procédures") +
    theme(plot.title = element_text(face="bold", colour = "blue", size = 12, hjust=0.5)) +
    theme(axis.title.y = element_text(face="bold", colour = "black", size = 10)) +
    theme(axis.title.x = element_text(face="bold", colour = "black", size = 10)) +
    geom_vline(aes(xintercept=quantile(PDS_Total_corrigé_Gy.cm2, 0.75)), color="red", linetype="dashed", lwd=1) +
     
     
    # Sauvegarde du Graphe:
     
    # extraire la spécialité
    Spe <- DFacte$Spécialité[1]
    ggsave(paste(Spe,paste0(cet_acte,".jpg"), sep="_"), device="jpg")
     
    # Effacer la DataFrame DFacte:
    rm(DFacte)
     
    }
    Et voici un exemple de ce que cela me donne pour un Acte donné (ici l'acte l'appelle : Pace Maker 1 ou 2 sondes) :

    Nom : Capture1.JPG
Affichages : 306
Taille : 28,0 Ko

    Et voici ce que j'aimerai obtenir (j'ai rajouté le cadre voulu en haut à droit avec paint pour exemple) :

    Nom : Capture2.jpg
Affichages : 250
Taille : 40,2 Ko

    Merci pour vos idées.
    Matou
    Images attachées Images attachées  

  2. #2
    Membre habitué
    Homme Profil pro
    Master Data Manager
    Inscrit en
    Février 2017
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Master Data Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2017
    Messages : 113
    Points : 148
    Points
    148
    Par défaut
    Bonjour Matou06


    une piste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ggplot() +
      annotate( geom = "text", x = 10, y = 10, label = "mon texte" )

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Physicienne Médicale
    Inscrit en
    Mai 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Physicienne Médicale

    Informations forums :
    Inscription : Mai 2019
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Merci Puppet_Master pour cette piste.
    Je l'avais déjà explorée, et elle fonctionne mais de manière imparfaite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ggplot(DFacte)  +  
    #...
    annotate( geom = "text", x = max(DFacte$PDS_Total_corrigé_Gy.cm2), y = 10, label = quantile(DFacte$PDS_Total_corrigé_Gy.cm2 , 0.75), colour="red" )
    Voici le graphe :
    Nom : Capture3.JPG
Affichages : 217
Taille : 23,6 Ko

    j'ai quelques éléments à résoudre :

    1/ J'arrive à positionner le texte (et ma valeur de Q3) à droite / en bas de mon graphique (par la fonction max(données)).
    Mais comment le positionner en haut de l'échelle des Y (qui sont l'échelle de fréquence de mon histogramme) ?

    2 / Comment écrire en plus un texte : par exemple "Q3 =" + ma valeur de Q3 ?

    Bonne journée !
    Matou

  4. #4
    Membre habitué
    Homme Profil pro
    Master Data Manager
    Inscrit en
    Février 2017
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Master Data Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2017
    Messages : 113
    Points : 148
    Points
    148
    Par défaut
    Citation Envoyé par Matou06 Voir le message
    1/ Je voudrais une formule pour entrer la valeur du quantile automatiquement pour mes environ 40 graphes et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    quantile(d$val, probs = 0.75)

    Citation Envoyé par Matou06 Voir le message
    2/ je vais avoir des histogrammes avec des X et Y différents dans ma boucle, alors comment faire pour avoir l'écriture toujours au même endroit sur mes différents graphiques. A la rigueur je veux bien explorer la piste d'écrire ma valeur de quantile à côté de ma ligne pointillée rouge.
    une possibilité est de mettre en sous-titre du graphique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     + labs( subtitle = paste0( "75è centile = ", quantile(d$val, probs = 0.75), " Gy.cm²" ) )

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Physicienne Médicale
    Inscrit en
    Mai 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Physicienne Médicale

    Informations forums :
    Inscription : Mai 2019
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    Ah, j'avais modifiée ma réponse pour préciser mes questions,...
    mais du coup je vais explorer tes propositions, merci ++ Puppet_Master :-)))

  6. #6
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Points : 561
    Points
    561
    Par défaut
    Bonjour,

    tu peux te servir de la fonction [C]ggplot_build[C] pour récupérer les paramètres de la fenêtre graphique et ainsi mettre toujours au même endroit ta boite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    x <- rlnorm(1000)
    g1 <- ggplot(data.frame(x = x), aes(x)) + geom_histogram()
    l1 <- ggplot_build(g1)$layout$panel_params[[1]][c("x.range", "y.range")]
    x1 <- l1$x[1] + diff(l1$x)*0.9
    y1 <- l1$y[1] + diff(l1$y)*0.9
    txt <- sprintf("75 ème centile =\n%0.2f Gy.cm²", round(quantile(x, 0.75),2))
     
    g1 +   annotate( geom = "text", x = x1, y = y1, label = txt)
    cdlt

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Physicienne Médicale
    Inscrit en
    Mai 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Physicienne Médicale

    Informations forums :
    Inscription : Mai 2019
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    J'ai suivi ta proposition de créer un SUBTITLE, merci beaucoup.
    ...même si j'aimerai bien savoir comment placer le texte sur un histogramme de fréquence en Y) :-)...si quelqu'un sait ?

    Donc avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ggplot(DFacte)  +  
    ...
    labs( subtitle = paste0("75è centile = ", round(quantile(DFacte$PDS_Total_corrigé_Gy.cm2, 0.75),2)  , " Gy.cm²" ) )  +
    theme(plot.subtitle = element_text(face="bold", colour ="red" , size = 10, hjust=0.5))
    Du coup j'arrive à obtenir ça pour le subtitle :

    Nom : Capture4.JPG
Affichages : 289
Taille : 24,8 Ko

    Et ma dernière question sur le sujet :
    Comment définir une portion de texte d'une couleur différente ?
    Comment faire pour mettre le résultat (8.17) en rouge et le reste du texte en noir ?


    Merci
    Matou

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Physicienne Médicale
    Inscrit en
    Mai 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Physicienne Médicale

    Informations forums :
    Inscription : Mai 2019
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par tototode Voir le message
    Bonjour,

    tu peux te servir de la fonction [C]ggplot_build[C] pour récupérer les paramètres de la fenêtre graphique et ainsi mettre toujours au même endroit ta boite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    x <- rlnorm(1000)
    g1 <- ggplot(data.frame(x = x), aes(x)) + geom_histogram()
    l1 <- ggplot_build(g1)$layout$panel_params[[1]][c("x.range", "y.range")]
    x1 <- l1$x[1] + diff(l1$x)*0.9
    y1 <- l1$y[1] + diff(l1$y)*0.9
    txt <- sprintf("75 ème centile =\n%0.2f Gy.cm²", round(quantile(x, 0.75),2))
     
    g1 +   annotate( geom = "text", x = x1, y = y1, label = txt)
    cdlt
    Merci tototode, je vais également tester cette proposition, je sens que je vais apprendre de nouvelles fonctions :-).
    Une question (sûrement basique…), comment modifier la couleur d'une partie du texte (résultat et reste du texte de couleurs différentes) ?

    Matou

  9. #9
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Points : 561
    Points
    561
    Par défaut
    Bonjour,

    je ne connais pas de manière "simple" de pouvoir jouer sur des couleurs différentes dans une même chaîne de caractères. Une possibilité est de passer par les expressions ?plotmath et de surimposer une expression en noir et la même expression en rouge en entourant le texte qui doit rester en noir de l'expression phantom pour que l'espace du texte soit pris en compte mais que celui-ci ne soit pas affiché.
    Il y a surement bien plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    g1 +  
      annotate( geom = "text", x = x1, y = y1, label = expression(atop(paste("75 ème centile"), paste("1.90 " , textstyle(Gy.cm²))))) +
      annotate( geom = "text", x = x1, y = y1, label = expression(atop(phantom(paste("75 ème centile")), paste("1.90 " , phantom(textstyle(Gy.cm²))))), color = "red")
    cdlt

  10. #10
    Nouveau membre du Club
    Femme Profil pro
    Physicienne Médicale
    Inscrit en
    Mai 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Physicienne Médicale

    Informations forums :
    Inscription : Mai 2019
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Merci tototode, effectivement c'est une solution (je vais tester), je pensais qu'il y avait plus simple mais tant que ça fonctionne !
    En tous cas, merci, j'apprends beaucoup :-)

    Matou

Discussions similaires

  1. [JFreeChart] Ajout valeur sur histogramme
    Par Yokooo dans le forum Débuter
    Réponses: 18
    Dernier message: 12/05/2010, 11h29
  2. [JFreeChart] Ajout valeur sur histogramme
    Par Yokooo dans le forum Débuter
    Réponses: 0
    Dernier message: 11/05/2010, 11h18
  3. Ajout donnée sur une liste
    Par zeralium dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/05/2008, 22h49
  4. Ajout d'étiquettes de données sur un graphe MSCHART type 2dXY
    Par larep dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 15/01/2007, 21h37
  5. Réponses: 8
    Dernier message: 29/08/2006, 08h31

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