Créer un graphique avec des barres "dodged" et "stacked""

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

Corentin Clément
Messages : 2
Enregistré le : 13 Sep 2023, 13:06

Créer un graphique avec des barres "dodged" et "stacked""

Messagepar Corentin Clément » 12 Fév 2024, 16:17

Bonjour,

Je souhaite créer un graphique de barres empilées avec sur l'axe des x mes parcelles et des histogrammes qui sont "dodge" selon la variable Type ("Grain", "Paille" et "Adventices"). J'aimerais que pour chaque type cela me "stack" les valeurs par Espèce Mesurée. De plus, j'aimerais que les couleurs soient uniques (exemple : pour les pailles différentes catégories de jaune par espèce ou différentes nuances de transparence).

Ci-dessous le code où je bloque et je n'arrive pas à empiler les barres (elles se superposent simplement et s'empilent pas).

Code : Tout sélectionner

ggplot(df, aes(x = Parcelle, y = mean_Poid_sec, fill = Type)) +
    geom_bar(position = position_dodge(width = 0.9), stat = "identity") +
    ggh4x::facet_grid2(~Culture, scales = "free", space = "free") +
    geom_errorbar(aes(ymax = mean_Poid_sec + se_Poid, ymin = mean_Poid_sec - se_Poid),
                  position = position_dodge(width = 0.9), width = 0.2, linewidth = 0.5) +
    theme_bw() +
    labs(y = "Biomasse sèche (T/ha)", x = "") +
    scale_y_continuous(breaks = seq(0, max(df[[i]]$mean_Poid_sec), by = 1))


Merci beaucoup pour votre aide car je n'arrive déffinitivement pas à trouver une solution
Corentin

############################
Voici la structure de ma base de donnée :

Code : Tout sélectionner

# Création des données pour Grain
data_grain <- data.frame(
  Parcelle = rep(c("Parcelle1", "Parcelle2"), each = 4),  # Exemple de noms de parcelles
  EspeceMesuree = c("Epeautre", "Feverole", "Triticale", "Pois"),
  Type = "Grain",
  mean_Poid_sec = c(4.2, 3.8, 3.5, 4.0),  # Valeurs moyennes de poids fictives pour le grain
  se_Poid = c(0.5, 0.6, 0.4, 0.7)          # Écarts types fictifs
)

# Création des données pour Paille
data_paille <- data.frame(
  Parcelle = rep(c("Parcelle1", "Parcelle2"), each = 4),  # Exemple de noms de parcelles
  EspeceMesuree = c("Epeautre", "Feverole", "Triticale", "Pois"),
  Type = "Paille",
  mean_Poid_sec = c(3.8, 3.4, 3.1, 3.6),  # Valeurs moyennes de poids fictives pour la paille
  se_Poid = c(0.4, 0.5, 0.3, 0.6)          # Écarts types fictifs
)

# Création des données pour Adventices
data_adventices <- data.frame(
  Parcelle = rep(c("Parcelle1", "Parcelle2"), each = 1),  # Exemple de noms de parcelles
  EspeceMesuree = "Adventices",
  Type = "Adventices",
  mean_Poid_sec = 2.0,  # Valeur moyenne fictive pour les adventices
  se_Poid = 0.3          # Écart type fictif pour les adventices
)

# Fusionner les données
base_de_donnees <- rbind(data_grain, data_paille, data_adventices)

Maxime Deniaux
Messages : 68
Enregistré le : 11 Fév 2022, 22:49
Contact :

Re: Créer un graphique avec des barres "dodged" et "stacked""

Messagepar Maxime Deniaux » 12 Fév 2024, 19:09

Salut Corentin,

je suis pas sûr d'avoir bien compris ta demande, et j'imagine que la data que tu as donné ici est fictive, donc je te propose ça comme solution mais je ne pense pas que ce soit vraiment adapté à une reproduction avec d'autres données ( sous-entendu, il faudra probablement un peu retouché le code):

Code : Tout sélectionner

base_de_donnees_bis              <- base_de_donnees %>% group_by(Parcelle, Type, EspeceMesuree) %>% summarise(count = n())
base_de_donnees_bis$EspeceMesuree <- factor(x = base_de_donnees_bis$EspeceMesuree,
                                            levels = c('Adventices','Epeautre','Feverole','Pois','Triticale'))

base_de_donnees_bis               <- base_de_donnees_bis %>% mutate(fill_type = case_when(Type == "Adventices" ~ "red",Type == "Grain" ~ "yellow",Type == "Paille" ~ "blue"), alpha_espece = case_when(EspeceMesuree == "Adventices" ~ 1, EspeceMesuree == "Epeautre" ~ 0.65,   EspeceMesuree == "Feverole" ~ 0.45,  EspeceMesuree == "Pois" ~ 0.25,       EspeceMesuree == "Triticale" ~ 0.1))
                                                                                                                                                         

ggplot(base_de_donnees_bis,aes(x=Type,y=count,fill=fill_type, alpha = reorder(EspeceMesuree, alpha_espece)))+
  geom_bar(stat = "identity",color="gray40",width = 1)+
   scale_fill_manual(values = c( "blue", "red","yellow"))+
  scale_alpha_manual(values = rev(c(1,0.65,0.45,0.25,0.1))) +
  facet_wrap(~Parcelle,nrow=1) +
   theme(panel.spacing = grid::unit(0, "lines"),
            panel.background = element_rect(fill = "white")) +
   guides(fill="none",
             alpha = guide_legend(title = "")) +
   labs(x = "", y = "")
                                                                                                                        



Bonne fin de soirée

Corentin Clément
Messages : 2
Enregistré le : 13 Sep 2023, 13:06

Re: Créer un graphique avec des barres "dodged" et "stacked""

Messagepar Corentin Clément » 13 Fév 2024, 12:36

Bonjour Maxime,

Merci, cela correspond exactement à ce que je cherche à faire.

Super!
Corentin.


Retourner vers « Questions en cours »

Qui est en ligne

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

cron