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 :

[ggplot2] Avoir deux axes y et un axe x


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 606
    Par défaut [ggplot2] Avoir deux axes y et un axe x
    Bonjour,

    Je voudrais savoir comment obtenir ce plot ci-dessous avec ggplot2,
    J'ai essayé de faire cela, mais le plot ne se génère pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    library(caret)
    library(ggplot2)
     
    data(iris)
     
    model <- train(Petal.Width ~ ., data = iris, method = "pls")
     
    ggplot(model$results, aes(model$results$ncomp, model$results$Rsquared)) +
      geom_point() +
      geom_line() +
      scale_y_continuous(sec.axis = sec_axis(model$results$RMSE~.)) 
      #labs(x = "ncomp", y="r²")
    Nom : Sans titre.png
Affichages : 3798
Taille : 3,7 Ko

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Par défaut
    Bonsoir.
    Sur ma session (R 3.5.3, {ggplot2} version 3.1.0) ton code fonctionne très bien, y compris les labels en commentaire. On peut ajouter une option name dans la fonction sec_axis pour titrer l'axe secondaire.

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 606
    Par défaut
    Bonjour,

    J'ai mis à jour le package ggplot2,

    Pour la partie RMSE se sont les valeurs de Rsquared qui sont inscrit sur la droite et il n'y a pas de points aussi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    library(caret)
    library(ggplot2)
    data(iris)
    model <- train(Petal.Width ~ ., data = iris, method = "pls")
     
    ggplot(model$results, aes(x = ncomp, y = Rsquared)) +
      geom_path() +
      geom_point() +
      scale_y_continuous(name = "Rsquared", sec.axis = sec_axis(~., name = "RMSE"))
    Pièce jointe 469743
    Images attachées Images attachées  

  4. #4
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Par défaut
    Bonjour.
    Tu auras un axe secondaire gradué comme tu veux en changeant ta fonction sec_axis. Par contre dans {ggplot2} l'axe secondaire permet juste de présenter les mêmes données que l'axe Y, éventuellement dans des unités différentes (exemple classique : des températures en ° celsius et farenheit) ou juste en miroir, à l'identique. Ce n'est pas un vrai axe secondaire sur lequel on peut diriger certaines géométries, à ce que j'ai compris.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ggplot(model$results, aes(x = ncomp, y = Rsquared)) +
      geom_path() +
      geom_point() +
      scale_y_continuous(name = "Rsquared", 
                         sec.axis = sec_axis(~ model$results$RMSE, name = "RMSE"))
    Alternative : à partir de model$results, construire un data.frame avec pour chaque ncomp, une ligne mesure="R2" et une ligne mesure="RMSE" (avec {reshape2} ou {tidyr}), et faire le geom_point/geom_line avec un facet_wrap(~mesure) pour avoir les deux graphiques côte à côte.

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 606
    Par défaut
    J'ai essayé cela, ça donne un bon résultat mais il me faudrait une moyen de normaliser les valeurs du RMSE pour le ramener à la même échelle que le Rsquared puis de le dé-normaliser (car si le RMSE est égal à ces valeurs c(20, 24, 25) comment puis-je faire ?)

    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
    Rsquared <- model$results$Rsquared
    RMSE     <- model$results$RMSE + 0.7
     
    r2 <- data.frame("ncomp" = model$results$ncomp, 
                     "val" = Rsquared, 
                     "lab" = c("r²"))
    rmse <- data.frame("ncomp" = model$results$ncomp,
                       "val" = RMSE, 
                       "lab" = c("rmse"))
     
    d <- rbind(rmse, r2)
     
    ggplot(d, aes(x=ncomp, y=val, group=lab)) +
      geom_path() +
      geom_point() +
      scale_y_continuous(name="Rsquared", sec.axis = sec_axis(~ . -0.7, name="RMSE"))
    Nom : Rplot.png
Affichages : 3800
Taille : 4,0 Ko

Discussions similaires

  1. [XL-2010] Avoir la même échelle sur les deux axes X;Y
    Par znmile dans le forum Excel
    Réponses: 3
    Dernier message: 13/06/2011, 12h13
  2. Avoir deux axes 'x' sur un graphique
    Par schutz dans le forum MATLAB
    Réponses: 1
    Dernier message: 09/07/2007, 11h40
  3. Graph deux axes en y
    Par mysimbaa dans le forum MATLAB
    Réponses: 7
    Dernier message: 30/11/2006, 19h43
  4. Comment dessiner deux axes en (0,0) avec un repere?
    Par jlassiramzy dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 18/07/2006, 02h40
  5. [VB]Chartspace - Graph à deux axes
    Par alexxx69 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/02/2006, 23h35

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