ggplot2 et barplot

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

DUCHATEAU Emmanuel
Messages : 25
Enregistré le : 08 Avr 2008, 06:40

ggplot2 et barplot

Messagepar DUCHATEAU Emmanuel » 29 Sep 2010, 17:59

Bonjour,

Avec la fonction barplot, je n'ai pas de problème mais afin de réaliser de plus beaux graphiques, je souhaiterai réaliser un barplot avec la library ggplot2.

J'ai lu plusieurs sites de présentation (notamment http://had.co.nz/ggplot2/geom_bar.html)
Cependant, en y, le barplot me fait un compte par facteur, et j'aimerai qu'il m'indique la valeur de la variable "dhp".
Voici un exemple avec mon jeu de données:

Code : Tout sélectionner

   Espece Placette     dhp
1      EN        A  6.5250
2      EN        B  7.8000
3      EN        C 11.9750
4      EN        D 12.7000
5      EN        E 14.5500
6      EN        F 17.7500
7      EN        G 16.6250
8      EN        H 17.2500
9      ES        A  5.2250
10     ES        B  4.5000
11     ES        C 14.2000
12     ES        D 13.7500
13     ES        E 21.3750
14     ES        F 18.5000
15     ES        G 16.2750
16     ES        H 16.4500
17      P        A      NA
18      P        B      NA
19      P        C 10.8750
20      P        D 12.6500
21      P        E 12.5500
22      P        F 23.0025
23      P        G 15.2500
24      P        H 20.1250


Je souhaite donc construire mon barplot en fonction de la colonne "Espèce" et "placette".
Pour le moment, avec ce code

Code : Tout sélectionner

ggplot(knot, aes(Espece, fill=Placette))+ geom_bar(position="dodge")

j'obtiens ceci:

Image
Sur l'axe des y, j'ai toujours la valeur 1 étant donné que je n'ai qu'une valeur par groupe.
Quelqu'un connaitrait-il le ou les arguments qui me manque ou est-ce mes données qui ne sont pas structurées comme il faut?

Merci d'avance

Nathalie Keussayan
Messages : 19
Enregistré le : 28 Avr 2010, 07:20

Messagepar Nathalie Keussayan » 30 Sep 2010, 07:15

Bonjour,
ggplot(knot,aes(y=dhp,x=Espece,fill=Placette))+geom_bar(position="dodge") ?

Emmanuel Corse
Messages : 21
Enregistré le : 19 Avr 2012, 08:29

Re: ggplot2 et barplot

Messagepar Emmanuel Corse » 25 Mai 2017, 06:31

Bonjour,

jai un probleme similaire.

J'ai des données terrain qui décrivent une succession amont aval des différents habitats d'une rivière ainsi que leurs longueurs respectives dans un fichier "ETI3". Il ressemble à cela:

ID longueur facies
radier1 23 radier
rapide1 44 rapide
radier2 28 radier
rapide2 55 rapide
radier3 13 radier
........

J'aimerais qu'il utilise l' "ID" comme variables pour construire le geom_bar mais qui l'utilise "facies" pour la couleur.

Voici mon script et la figure generéée:

ggplot(ETI3, aes(x="", y=Longueur, fill = ID,color=facies)) +
geom_bar(width = 10, stat = "identity")

https://drive.google.com/open?id=0B0YMs ... XdCWXBIU1k

Image


le probleme c'est qu'il ne colore que le cadre avec la variable "facies" mais pas l'intérieur, qu'il colore donc toujours avec la variable "ID".

Quelqu'un peut il m'aider? merci d'avance

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: ggplot2 et barplot

Messagepar Mickael Canouil » 26 Mai 2017, 09:48

Bonjour,

En gros vous voulez en abscisse les "individus" et en ordonnée les "Longueur", et ce pour chaque "facies".
Il faut donc mettre "ID" dans x et non dans "fill" qui va définir la couleur de remplissage des barres. (color/colour définissent la couleur du trait des barres).

Code : Tout sélectionner

ggplot(ETI3, aes(x=ID, y=Longueur, fill = facies,color=facies)) +
geom_bar(width = 10, stat = "identity")


Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

Emmanuel Corse
Messages : 21
Enregistré le : 19 Avr 2012, 08:29

Re: ggplot2 et barplot

Messagepar Emmanuel Corse » 29 Mai 2017, 06:41

Bonjour,

tout d'abord merci Mickael pour ta réponse. Non j'aimerais conserver 1 seul barplot. Voici ce que j'aimerais obtenir :

https://drive.google.com/open?id=0B0YMs ... 1ptZWd4VW8

Image

Cordialement,
Emmanuel

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: ggplot2 et barplot

Messagepar Mickael Canouil » 29 Mai 2017, 09:54

Bonjour,

dans ce cas, il ne s'agit plus d'un comportement standard prévu dans ggplot, et vous devez ainsi définir vous même les couleurs.

Code : Tout sélectionner

ETI3=read.table(text = "
ID longueur facies
radier1 23 radier
rapide1 44 rapide
radier2 28 radier
rapide2 55 rapide
radier3 13 radier", header = TRUE)

ETI3[, "ID"] <- factor(ETI3[, "ID"], levels = unique(ETI3[, "ID"]))

ggplot(ETI3, aes(x="1", y=longueur, fill = ID)) +
   geom_bar(width = 5, stat = "identity") +
   scale_fill_manual(values = c(2, 3, 2, 3, 2), breaks = c("radier1", "rapide1", "radier2", "rapide2", "radier3"))
Mickaël
mickael.canouil.fr | rlille.fr

Emmanuel Corse
Messages : 21
Enregistré le : 19 Avr 2012, 08:29

Re: ggplot2 et barplot

Messagepar Emmanuel Corse » 29 Mai 2017, 11:32

Merci Mickael pour ta réactivité,

effectivement cela marche. Merci.

Cependant étant donné que j'aurais un cinquantaine d'histogrammes de ce type là et qu'en réalité il y a beaucoup plus de lignes dans mon jeu de données que dans l'exemple présenté ici, je vais essayer d'automatiser la définition des vecteurs "values" et "breaks" du module "scale_fill_manual afin d'éviter de les rentrer justement "manuellement":

scale_fill_manual(values = c(2, 3, 2, 3, 2), breaks = c("radier1", "rapide1", "radier2", "rapide2", "radier3"))

Si tu as une idée, je suis preneur.

Manu

Emmanuel Corse
Messages : 21
Enregistré le : 19 Avr 2012, 08:29

Re: ggplot2 et barplot

Messagepar Emmanuel Corse » 29 Mai 2017, 12:53

Voilà ce que j'ai fait et ça marche:

succes<-data.frame(su=ETI3$facies)
levels(succes$su) <- c(levels(succes$su),"5","2","3","1","4","6","7","8","9","10") #####il est necessaire de creer des nouvelles modalités pour les utiliser
succes$su[succes$su == "rap"] <- "6"
succes$su[succes$su == "rad"] <- "4"
succes$su[succes$su == "placou"] <- "3"


ETI3[, "ID"] <- factor(ETI3[, "ID"], levels = unique(ETI3[, "ID"]))
ggplot(ETI3, aes(x="1", y=Longueur, fill = ID)) +
geom_bar(width = 5, stat = "identity") +
scale_fill_manual(values = succes$su,
breaks = c(
ETI3$ID
)
)


voici ce que j'obtiens:
https://drive.google.com/open?id=0B0YMsBmLBYNSWTdtc3NVQ1d3cjA




Par ailleurs, Maxime Logez (pour ceux qui connaisse) à compris pourquoi la fonction ggplot ne marchait pas dans mon cas et j'arrive à produire le même résultat avec ggplot mais en plus concis. Pour ceux qui tomberont sur un problème similaire, voici ce qu'il fallait faire avec cette fonction:


ETI3$ID <- factor(ETI3$ID, levels = unique(ETI3$ID))
ggplot(ETI3, aes(x = 1, y = Longueur, group = ID, fill = facies))+ geom_bar(stat = "identity")

Merci en tout cas pour l'autre solution Mickael!

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: ggplot2 et barplot

Messagepar Mickael Canouil » 30 Mai 2017, 07:53

Ah oui, j'oublie souvent "group", permettant de subdiviser les données sans pour autant les lier à une "aesthetic" (légende).
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité