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 :

geom_rect() erreur de recouvrement (level2) pour colonne(level1, level3)


Sujet :

R

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 70
    Points : 45
    Points
    45
    Par défaut geom_rect() erreur de recouvrement (level2) pour colonne(level1, level3)
    Bonjour,


    J'ai trouvé ceci :https://stackoverflow.com/questions/...nut-chart-in-r

    J'ai pris ces données et les ai modifiées pour mon usage.

    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
     
    library(tidyverse
    library(ggplot2)
      library(webr)
      library(dplyr)
     
      lexicon <- data.frame("Level1" = c(rep("Tox", 9), rep("No tox", 3),rep("safety",3)),
                            "Level2" = c(rep("Enterobacteria", 6), rep("Bacillus", 5), rep("Probiotic", 4)),
                            "Level3" = c("E coli", "Proteus", "Citrobacter", "Salmonella", "Shigella", "Yersinia", "B Cereus", "B Anthracis", "B cytotoxicus", "B thuringiensis", "B mycoides", "Bifidobacterium sp"," Lactobacillus casei ", "Lactococcus lactis ", "Streptococcus thermophilus")
      )
      lexicon %>%
        mutate(top_level = Level1) %>%
        pivot_longer(1:3) %>%
        group_by(name, value) %>%
        mutate(width = n()) %>%
        unique() %>%
        arrange(name) %>%
        group_by(name) %>%
        mutate(ymid = as.numeric(sub("\\D+", "", name)),
               ymax = ymid + 0.5, ymin = ymid - 0.5,
               xmin = c(0, head(cumsum(width), -1)),
               xmax = cumsum(width),
               xmid = (xmax + xmin)/2 ) %>%
     
        ggplot(aes(xmid, ymid, fill = top_level)) +
        geom_rect(aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax,
                      alpha = name, color = top_level)) +
        geomtextpath::geom_textpath(aes(y = ymid + 0.25, label = value, 
                                        group = value)) +
        scale_alpha_manual(values = c(1, 0.3, 0.1)) +
        scale_fill_manual(values = c("#cd9900", "#00817e","#aaaaaa")) +
        scale_colour_manual(values = c("#cd9900", "#00817e","#aaaaaa")) +
        scale_y_continuous(limits = c(-0.5, 3.6)) +
        coord_polar() +
        theme_void() +
        theme(legend.position = "none")
    J'ai une erreur, le PieDonut (geom_rect) ne couvre pas tout le cercle avec utilisation de coord_polar().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Messages d'avis :
    1: Dans mapply(FUN = f, ..., SIMPLIFY = FALSE) :
      l'argument le plus long n'est pas d'une longueur multiple du plus court
    2: Dans mapply(FUN = f, ..., SIMPLIFY = FALSE) :
      l'argument le plus long n'est pas d'une longueur multiple du plus court
    3: Dans mapply(FUN = f, ..., SIMPLIFY = FALSE) :
      l'argument le plus long n'est pas d'une longueur multiple du plus court
    4: Dans path[singletons] <- Map(pathify, data = path[singletons], hjust = params$hjust[singletons],  :
      le nombre d'objets à remplacer n'est pas multiple de la taille du remplacement
    Merci pour la réponse

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 476
    Points : 831
    Points
    831
    Par défaut
    bonjour ,
    le problème vient du fait que l'on a des niveaux 2 qui sont communs à 2 niveaux 1 (Bacillus ==> Tox et no tox; Probiotic ==> no Tox et safety)
    une solution possible est de fusionner les niveaux 2 et 3

    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
     
    lexicon2 <- data.frame("Level1" = c(rep("Tox", 9), rep("No tox", 3),rep("safety",3)),
                          "Level2" = c(rep("Enterobacteria", 6), rep("Bacillus", 5), rep("Probiotic", 4)),
                          "Level3" = c("E coli", "Proteus", "Citrobacter", "Salmonella", "Shigella", "Yersinia", "B Cereus", "B Anthracis", "B cytotoxicus", "B thuringiensis", "B mycoides", "Bifidobacterium sp"," Lactobacillus casei ", "Lactococcus lactis ", "Strepto. thermophilus")
    ) |> mutate(Level2=str_c(Level2, "\n",Level3)) |> select(-Level3)
     
    lexicon2 %>%
      mutate(top_level = Level1) %>%
      pivot_longer(1:2) %>%  ##changer car plus que 2 niveaux
      group_by(name, value) %>%
      mutate(width = n()) %>%ungroup() |> 
      unique() %>%
      arrange(name) %>%
      group_by(name) %>%
      mutate(ymid = as.numeric(sub("\\D+", "", name)),
             ymax = ymid + 0.5, ymin = ymid - 0.5,
             xmin = c(0, head(cumsum(width), -1)), ##??
             xmax = cumsum(width),
             xmid = (xmax + xmin)/2 ) %>%
     
      ggplot(aes(xmid, ymid, fill = top_level)) +
      geom_rect(aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax,
                    alpha = name, color = top_level)) +
      geomtextpath::geom_textpath(aes(y = ymid + 0.25, label = value, 
                                      group = value),size=2.5) +
      scale_alpha_manual(values = c(1, 0.3, 0.1)) +
      scale_fill_manual(values = c("#cd9900", "#00817e","#aaaaaa")) +
      scale_colour_manual(values = c("#cd9900", "#00817e","#aaaaaa")) +
      scale_y_continuous(limits = c(-0.5, 3.6)) +
      coord_polar() +
      theme_void() +
      theme(legend.position = "none")
    bonne journée

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 476
    Points : 831
    Points
    831
    Par défaut
    plus simple et pour garder les 3 niveaux

    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
    lexicon2 <- data.frame("Level1" = c(rep("Tox", 9), rep("No tox", 3),rep("safety",3)),
                          "Level2" = c(rep("Enterobacteria", 6), rep("Bacillus", 5), rep("Probiotic", 4)),
                          "Level3" = c("E coli", "Proteus", "Citrobacter", "Salmonella", "Shigella", "Yersinia", "B Cereus", "B Anthracis", "B cytotoxicus", "B thuringiensis", "B mycoides", "Bifidobacterium sp"," Lactobacillus casei ", "Lactococcus lactis ", "Strepto. thermophilus")
    ) #|> mutate(Level2=str_c(Level2, "\n",Level3)) |> select(-Level3)
    lexicon2 %>%
      mutate(top_level = Level1) %>%
      pivot_longer(1:3) %>%  ##changer car plus que 2 niveaux
      group_by(top_level,name, value) %>%  ##on rajoute top_level dans le groupement
      mutate(width = n()) %>%ungroup() |> 
      unique() %>%
      arrange(name) %>%
      group_by(name) %>%
      mutate(ymid = as.numeric(sub("\\D+", "", name)),
             ymax = ymid + 0.5, ymin = ymid - 0.5,
             xmin = c(0, head(cumsum(width), -1)), ##??
             xmax = cumsum(width),
             xmid = (xmax + xmin)/2 ) %>%
      
      ggplot(aes(xmid, ymid, fill = top_level)) +
      geom_rect(aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax,
                    alpha = name, color = top_level)) +
      geomtextpath::geom_textpath(aes(y = ymid + 0.25, label = value, 
                                      group = value)) +
      scale_alpha_manual(values = c(1, 0.3, 0.1)) +
      scale_fill_manual(values = c("#cd9900", "#00817e","#aaaaaa")) +
      scale_colour_manual(values = c("#cd9900", "#00817e","#aaaaaa")) +
      scale_y_continuous(limits = c(-0.5, 3.6)) +
      coord_polar() +
      theme_void() +
      theme(legend.position = "none")

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/05/2015, 14h38
  2. Erreur sur champ text pour un index Full-Text
    Par Steph82 dans le forum Outils
    Réponses: 5
    Dernier message: 06/01/2011, 14h08
  3. Erreur 873 de rsync pour un passage cron
    Par GLDavid dans le forum Administration système
    Réponses: 18
    Dernier message: 14/11/2005, 14h58
  4. [JDBC] erreur "ResultSet is closed" pour 2 requêtes
    Par Lady_jade dans le forum JDBC
    Réponses: 2
    Dernier message: 26/10/2005, 09h54
  5. [JTable] Largeur minimale pour colonnes
    Par Klom dans le forum Composants
    Réponses: 9
    Dernier message: 01/09/2004, 23h45

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