ggplot avec diverses variables en colonne

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Sabine Barets
Messages : 2
Enregistré le : 31 Jan 2018, 13:44

ggplot avec diverses variables en colonne

Messagepar Sabine Barets » 05 Avr 2018, 07:10

Bonjour,

J’ai créé une typologie à partir de plusieurs variables et j’ai besoin de représenter ces variables sous forme de boxplot pour chaque type créé. J’ai 4 variables explicatives et 4 types (« struct » vaut 1, 2, 3 ou 4).

Voici la forme de la donnée de base :

Code : Tout sélectionner

> data
    N_placette    prop_PB    prop_BM    prop_GB   prop_TGB struct
4            4 0.00000000 0.47058824 0.52941176 0.00000000      1
5            5 0.15789474 0.52631579 0.26315789 0.05263158      2
6            6 0.33333333 0.58333333 0.08333333 0.00000000      3
8            8 0.11111111 0.44444444 0.44444444 0.00000000      1
9            9 0.14285714 0.50000000 0.28571429 0.07142857      2
10          10 0.23529412 0.41176471 0.23529412 0.11764706      3
11          11 0.15384615 0.61538462 0.15384615 0.07692308      2


Je souhaite donc représenter les boxplot de « prop_PB », « prob_BM », « prop_GB » et « prop_TGB » pour chaque valeur de « struct », et j’aimerai que mon graphique permette de se rendre compte des différentes entre chaque type de struct.
Je voudrais donc construire un graphique ggplot en 4 fenêtres (j’ai utilisé facet_grid(~struct)), et dans chaque fenêtre avoir 4 boxplot : un par variable explicative.

J'ai testé cette solution :

Code : Tout sélectionner

<- ggplot(data) +
  geom_boxplot(aes(x=struct, y=prop_PB))+
  geom_boxplot(aes(x=struct, y=prop_BM))+
  geom_boxplot(aes(x=struct, y=prop_GB))+
  geom_boxplot(aes(x=struct, y=prop_TGB))+
  facet_grid(~struct)
s


Mais cela ne fonctionne pas. Je pense que le problème est lié au fait que mes variables sont toutes dans des colonnes séparées mais je ne vois pas comment contourner ce problème.

Dois-je forcément réorganiser mes données ?

J’ai trouvé cette idée sur un forum mais je ne parviens pas à l’utiliser sur mes données (https://stackoverflow.com/questions/21388845/ggplot-arranging-boxplots-of-multiple-y-variables-for-each-group-of-a-continuou) :
Image

Visuellement par rapport à cette image, je voudrais que y.1 à y.4 soient remplacés par les 4 struct, que chaque couleur soit associée à une variable (prop_PB/BM/GB ou TGB).

J'espère que c'est assez clair, merci d'avance de votre aide !

Sabine

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: ggplot avec diverses variables en colonne

Messagepar Serge Rapenne » 05 Avr 2018, 08:04

Bonjour,

Dois-je forcément réorganiser mes données ?

Oui, ggplot utilise le format long. Pour transformer les données d'un format en colonne (format dit large) vers un format en ligne (format dit long), il y a au moins 3 possibilités, la fonction reshape fonction de base de R, la fonction melt du package reshape2 et la fonction gather du package tidyr.
Personnellement je préfère gather qui a une syntaxe que je trouve plus simple.

avec tes données :

Code : Tout sélectionner

library(tidyr)
library(ggplot2)

dta<-structure(list(N_placette = c(4L, 5L, 6L, 8L, 9L, 10L, 11L),
    prop_PB = c(0, 0.15789474, 0.33333333, 0.11111111, 0.14285714,
    0.23529412, 0.15384615), prop_BM = c(0.47058824, 0.52631579,
    0.58333333, 0.44444444, 0.5, 0.41176471, 0.61538462), prop_GB = c(0.52941176,
    0.26315789, 0.08333333, 0.44444444, 0.28571429, 0.23529412,
    0.15384615), prop_TGB = c(0, 0.05263158, 0, 0, 0.07142857,
    0.11764706, 0.07692308), struct = c(1L, 2L, 3L, 1L, 2L, 3L,
    2L)), .Names = c("N_placette", "prop_PB", "prop_BM", "prop_GB",
"prop_TGB", "struct"), class = "data.frame", row.names = c("4",
"5", "6", "8", "9", "10", "11"))

dta
   N_placette   prop_PB   prop_BM    prop_GB   prop_TGB struct
4           4 0.0000000 0.4705882 0.52941176 0.00000000      1
5           5 0.1578947 0.5263158 0.26315789 0.05263158      2
6           6 0.3333333 0.5833333 0.08333333 0.00000000      3
8           8 0.1111111 0.4444444 0.44444444 0.00000000      1
9           9 0.1428571 0.5000000 0.28571429 0.07142857      2
10         10 0.2352941 0.4117647 0.23529412 0.11764706      3
11         11 0.1538461 0.6153846 0.15384615 0.07692308      2

#transformation large vers long
dta_long<-dta %>% gather(Ident,Valeur,-struct,-N_placette)

head(dta_long)

  N_placette struct   Ident    Valeur
1          4      1 prop_PB 0.0000000
2          5      2 prop_PB 0.1578947
3          6      3 prop_PB 0.3333333
4          8      1 prop_PB 0.1111111
5          9      2 prop_PB 0.1428571
6         10      3 prop_PB 0.2352941

#graphique

ggplot(dta_long, aes(x=factor(Ident), y=Valeur,fill=factor(Ident)))+
  geom_boxplot()+
  facet_grid(.~struct)+
  theme(axis.text.x=element_text(angle=-90, vjust=0.4,hjust=1))

Serge

Sabine Barets
Messages : 2
Enregistré le : 31 Jan 2018, 13:44

Résolu / ggplot avec diverses variables en colonne

Messagepar Sabine Barets » 05 Avr 2018, 09:21

Bonjour Serge,

Merci beaucoup, ça fonctionne parfaitement !

J'avais déjà dû utiliser gather dans un autre contexte mais je ne savait pas que ggplot ne fonctionnait que de cette façon.

Merci encore,

Sabine


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité