Accueil > R - Graphisme > GGPLOT & NA

GGPLOT & NA

lundi 20 juin 2022, par Philippe MICHEL

Vous avez dessiné un beau graphique grâce à [**ggplot2*] mais apparaît une colonne (ou un boxplot...) pour le niveau NA ! Pafois ça a un sens mais mettons -nous dans la situation, fréquente, où on préférerait supprimer cette valeur.


Avoir un graphique de distribution des données manquantes peut souvent être utile, ne serait-ce que pour vérifier visuellement leur répartition régulière.

Créons un data.frame avec des données manquantes & traçons un graphique en violons :

  1. df <- iris
  2. df$Species[c(5,23,44,45,12,125)] <- NA
  3. #
  4. df |>  
  5.   ggplot() +
  6.   aes(x = Species, y = Petal.Length, fill = Species) +
  7.   geom_violin()

Télécharger

Le dernier violon est de trop ! Il existe plusieurs méthodes pour le supprimer sans altérer le reste du graphique ni vos précieuses données. AMHA la plus simple & facilement compréhensible est la suivante :

  1. df |>
  2.   dplyr::filter(!is.na(Species)) |>
  3.   ggplot() +
  4.   aes(x = Species, y = Petal.Length, fill = Species) +
  5.   geom_violin()

Télécharger

Une autre méthode, peut -être plus simple :

  1. df |>
  2.   tidyr::drop_na(Species) |>
  3.   ggplot() +
  4.   aes(x = Species, y = Petal.Length, fill = Species) +
  5.   geom_violin()

Télécharger

**Remarques

Quelques remarques sur ce code tout bête :

 Je commence toujours mes ggplot par :

  1. df |>
  2.   ggplot() +
  3. ...

Télécharger

alors que ggplot(df) + ... paraît plus simple. mais le pipe permet d’y insérer une instruction sans tout modifier comme dans notre exemple ou celui-ci.

 Pour la commande filter je précise toujours dplyr::filter car il existe aussi un filter dans le package [**base*] d’où erreurs & confusions surtout si ce code est dans un package.

 J’ai volontairement laisser le graphique brut sans aucune personnalisation. Vous pouvez facilement le mettre à votre goût, quelques conseils ici.