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 :

Aligner avec gridExtra ?


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    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
    Par défaut Aligner avec gridExtra ?
    Bonjour.

    J'ai un petit souci de mise en forme. J'ai deux graphiques, le deuxième découle du premier et j'utilise gridExtra pour les mettre côte à côte. Mais, je n'arrive pas à "aligner" les deux graphiques à cause des labels de l'axe X du premier graphique.

    Voici un code pour illustrer mon problème:

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    # dataframe de demo
    df <- data.frame(
      nom = c(424242:424299),
      val1 = rnorm(58, 10, 1),
      val2 = rnorm(58, 10, 1)
    )
     
    # modules
    library(ggplot2)
    library(gridExtra)
     
    # graph 1
    g1 <- ggplot(df) +
      aes(x = as.factor(nom)) +
      geom_bar(stat = "identity", aes(y = df$val1), col = "darkred", fill = "green", alpha = 0.5) +
      geom_bar(stat = "identity", aes(y = df$val2), col = "darkgreen", fill = "red", alpha = 0.5) +
      geom_hline(yintercept = 10.5, lty = 2) +
      theme(axis.text.x=element_text(angle = 90, hjust = 0, vjust = 0.5)) +
      ylim( 0, max(df$val1, df$val2) + 5 ) +
      labs(
        title = "Super graph",
        subtitle = "truc en fonction des bidules",
        x = "truc",
        y = "bidule"
      )
     
    g1
     
    # graph 2
    g2 <- ggplot(df) +
      aes(x = val1 , y = ..density.. ) +
      geom_histogram(aes( fill = ..count..)) +
      geom_density() +
      geom_vline(xintercept = 10.5, lty = 2) +
      xlim(0, max(df$val1, df$val2) + 5) +
      labs(
        title = "",
        subtitle = "",
        x = "",
        y = "Density"
      ) +
      coord_flip()
     
    g2
     
    # assemblage
    grid.arrange(g1, g2, ncol = 2, widths = c(3,1))
    quelqu'un a-t-il une solution à mon petit souci ?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Décembre 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2015
    Messages : 72
    Par défaut
    Bonjour,

    Je vous conseille d'utiliser la fonction multiplot(g1,g2) pour réaliser cela.

    Vous trouverez le code ici -> http://www.cookbook-r.com/Graphs/Mul...age_(ggplot2)/

    Après je ne sais pas trop si cela répond à votre question, car je ne sais pas trop quel est le problème d'alignement que vous évoquez.

    VV

  3. #3
    Membre éprouvé
    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
    Par défaut
    Bonjour VonVelten.

    Merci de votre réponse. J'ai fait des essais avec cette fonction, mais j'ai le même problème.

    Je vais préciser mon problème à l'aide d'une image

    Je souhaite aligner les graphiques pour que les axes Y correspondent. Mais j'ai un décalage: (les deux grosses lignes rouges) :

    Nom : super_graph.png
Affichages : 182
Taille : 24,3 Ko

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Décembre 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2015
    Messages : 72
    Par défaut
    Bonjour,

    simplement, il suffit de jouer sur le positionnement des axes du 2e graphique. Pour cela, j'ai décalé la valeur minimale du coup des ordonnées vers le bas, pour faire remonter le 0 et aligner les axes.

    J'ai fait cela avec la commande scale_x_continuous(). Par contre il faut regarder sur l'exportation du graphique pour le rendu final. En effet selon la taille du graphique exporté , il faut ajuster cette valeur pour avoir la bonne valeur.

    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
    g2 <- ggplot(df) +
      aes(x = val1 , y = ..density.. ) +
      geom_histogram(aes( fill = ..count..)) +
      geom_density() +
      geom_vline(xintercept = 10.5, lty = 2) +
      labs(
        title = "",
        subtitle = "",
        x = "",
        y = "Density"
      ) +
      coord_flip()+
      scale_x_continuous(limits=c(-2,max(df$val1, df$val2) + 5),breaks=c(0,5,15)) # Il faut jouer sur la valeur basse du y (ici -2)
     
    # g2
    Voilà le rendu : Nom : Rplot.png
Affichages : 143
Taille : 13,9 Ko

    VV

  5. #5
    Membre éprouvé
    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
    Par défaut
    Bonjour.

    OK. La solution est valide. Il me suffit de fixer les dimensions du graphique final et de trouver le bon modificateur a appliqué à la limite basse de l'axe Y du deuxième graphique.

    Merci VonVelten.

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

Discussions similaires

  1. Soucis d'alignement avec le css
    Par Olivier Regnier dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 18/01/2008, 12h12
  2. Pb alignement avec firefox
    Par PurpleD dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 13/10/2007, 15h08
  3. Combler un div de menu vertical pour l'aligner avec un div de contenu
    Par pc.bertineau dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 31/05/2007, 23h58
  4. Problème alignement avec trois div
    Par finalfx dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 20/05/2006, 18h48

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