ggplot2 geom_count légende

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

Emilien Mineaud
Messages : 2
Enregistré le : 23 Oct 2018, 07:06

ggplot2 geom_count légende

Messagepar Emilien Mineaud » 23 Oct 2018, 08:07

Bonjour à tous,

J'ai commencé à utiliser le package ggplot 2 il y a quelques jours et bloque aujourd'hui sur la légende d'un graphique.
Je cherche à obtenir un graphique comme celui là :
Image

Je pense être sur la bonne voie, mais n'arrive pas à organiser la légende sous forme de classes (exemple : [0 ; 1000[).

Code : Tout sélectionner

read.table("bio.txt", header = TRUE) -> bio
library(ggplot2)
library(scales)
library(tidyr)
library(dplyr)
library(hrbrthemes)

bio=gather(bio,"Station","Biomass",2:6)
t=as.vector(bio[1:25,1]) #Ordonne les dates
u=as.vector(c("M","E2","E1","F2","F1")) #Ordonne les stations

bio$class<-case_when(
  bio$Biomass > -1 & bio$Biomass < 1000  ~ "[0 ; 10e+3[",
  bio$Biomass > 1000 & bio$Biomass < 10000  ~ "[10e+3 ; 10e+4[",
  bio$Biomass > 10000 & bio$Biomass < 100000  ~ "[10e+4 ; 10e+5[",
  bio$Biomass > 100000 & bio$Biomass < 1000000  ~ "[10e+5 ; 10e+6[",
  bio$Biomass > 1000000   ~ "[10e+6 ; 3.10e+6[" )

ggplot(bio, aes(x = Date, y =Station)) +
  geom_count(aes(size = Biomass,fill=class))+
  scale_size_area(max_size = 10) +   scale_x_discrete(limits=t)+ scale_y_discrete(limits=u) +
  theme(axis.text.x = element_text(angle=90))
 

Ca donne ça :
Image
Mais pas moyen d'avoir ma légende comme je veux, surtout que les classes proposées automatiquement ne sont pas du tout représentatives de la répartition des données.
Pour information je travaille sur un nombre de cellules / mL prélevées sur différents sites à différentes dates.
Si besoin je peux fournir je jeu de données.

Au passage, si quelqu'un sait comment colorier les points en fonction des ordonnées, comme sur le graphique en exemple, je suis preneur.

Merci d'avance !

Emilien

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

Re: ggplot2 geom_count légende

Messagepar Mickael Canouil » 23 Oct 2018, 11:16

Bonjour,

avec un exemple reproductible, cela aurait été plus facile.

Code : Tout sélectionner

library(tidyverse)
bio <- tibble(
  Date = seq(from = as.Date("2018-10-10"), to = as.Date("2018-10-23"), by = 1),
  Station = list(apply(expand.grid(LETTERS[1:5], 1:2), 1, paste, collapse = ""))
) %>%
  unnest(Station) %>%
  mutate(Biomass = rexp(n = n(), rate = 0.1)) %>%
  mutate(Class = cut_interval(x = Biomass, n = 5)) %>%
  mutate(Date_chr = as.character(Date)) %>%
  mutate(label = ifelse(Biomass>=quantile(x = Biomass, probs = 0.95), round(Biomass, 0), NA))


La taille des points doit-elle dépendre de "Class" ou de "Biomass" ?
Dans votre code, vous indiquez vouloir deux légendes:
  • size = Biomass => une légende où la taille des points se fera en fonction de la valeur numérique de "Biomass"
  • fill = class => une couleur de remplissage (le type de point par défaut, n'a pas de remplissage et ne dispose que d'une couleur) qui sera différente selon les modalités du facteur/caractère contenu dans "class"
En résumé, vous obtenez exactement ce que vous avez demandé.

Ainsi, si on veut des tailles de points selon le facteur "class":

Code : Tout sélectionner

ggplot(data = bio, mapping = aes(x = Date_chr, y = Station)) +
  geom_count(mapping = aes(size = Class, colour = Station)) +
  geom_text(mapping = aes(label = label), colour = "black") +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
  guides(colour = "none")

Image

Si on veut en fonction de la variable quantitative Biomass:

Code : Tout sélectionner

ggplot(data = bio, mapping = aes(x = Date_chr, y = Station)) +
  geom_count(mapping = aes(size = Biomass, colour = Station)) +
  geom_text(mapping = aes(label = label), colour = "black") +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
  guides(colour = "none")

Image

Notez au passage l'utilisation de "colour = Station", où "Station" est la variable utilisée en ordonnée.

Pour utilisation de l'argument "limits" dans les scales_*, je vous suggère de retourner consulter la documentation de ggplot2.

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

Emilien Mineaud
Messages : 2
Enregistré le : 23 Oct 2018, 07:06

Re: ggplot2 geom_count légende

Messagepar Emilien Mineaud » 23 Oct 2018, 13:54

Bonjour Mickael,

Merci beaucoup pour ces explications, tout est très clair. J'ai pu obtenir exactement le graphique souhaité !

Pour ce qui est de l'argument "limits"dans les scales_*, je l'utilise pour définir l'ordre de mes dates et stations sur les axes, à partir de vecteurs. Ceci n'est pas correct ? Cela me donne le résultat attendu, mais n'étant pas très à l'aise avec R, je ne vois peut-être pas l'erreur ...

Merci encore pour le temps accordé.

Emilien

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

Re: ggplot2 geom_count légende

Messagepar Mickael Canouil » 23 Oct 2018, 15:36

Voir la documentation:
https://ggplot2.tidyverse.org/reference ... nuous.html

Un extrait:
breaks
One of:
NULL for no breaks
waiver() for the default breaks computed by the transformation object
A numeric vector of positions
A function that takes the limits as input and returns breaks as output


limits
A numeric vector of length two providing limits of the scale. Use NA to refer to the existing minimum or maximum.
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é