Légende - Finition du graphie

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

Sébastien Giroud
Messages : 2
Enregistré le : 20 Déc 2017, 15:55

Légende - Finition du graphie

Messagepar Sébastien Giroud » 21 Déc 2017, 15:20

Bonjour à tous,

Je rencontre actuellement quelques problèmes d'ordre esthétique avec mes graphiques. Dans mon graphique (style barplot), j'aimerais bien changer l'order et les noms de mes légendes. Voilà un aperçu du problème. En ayant changé l'ordre des bars, l'order n'a pas changé dans la légende.

Image

Un second souhait serait de changer le nom des légendes. Par exemple, à la place de CO2 avoir CO2 + H2 / Formate (avec, si possible, les 2 en indice). La solution la plus simple serait de changer mon fichier de données, mais j'aimerais éviter comme les espaces et les indices n'y sont pas possible. Un exemple d'une ligne de la donnée:

Code : Tout sélectionner

OTU_84   23   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   p__Euryarchaeota; c__Methanobacteria; o__Methanobacteriales; f__Methanobacteriaceae; g__Methanobrevibacter; s__CO2

Donc plutôt difficile de mettre dans ce code un CO2 + H2 / Formate (avec, si possible, les 2 en indice).

Voilà le code utiliser jusqu'à présent:

Code : Tout sélectionner

p <- plot_bar(bs_food.norm , "Depth",fill="Species",  title = "Black Sea")
p <- p + geom_bar(aes( fill = factor(Species, levels=c("CO2","All", "Acetate", "UK", "MeOH", "Met"))), stat = 'identity', position = 'stack') # colour = "black",
p <- p + ylab("Relative abundance (% of total sequences)")
p <- p + coord_flip()
p <- p + xlim(320,-10)
p <- p + theme(legend.position="right")
p <- p + guides(fill = guide_legend(title="Substrates", levels=c("CO2","All", "Acetate", "UK", "MeOH", "Met")))
p


Dans le guide_legend, j'ai tenté de remettre un levels, sans que l'ordre des légendes ne fût changé.

Toute aide est la bienvenue,
Merci beaucoup

Bonnes fêtes à tous,
Sébastien

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

Re: Légende - Finition du graphie

Messagepar Mickael Canouil » 22 Déc 2017, 09:23

Bonjour,

qu'est-ce que la fonction "plot_bar" ?

La phrase usuelle sur ce forum: Pourriez-vous fournir un exemple reproductible? viewtopic.php?f=1&t=7638 et viewtopic.php?f=1&t=3302

Pour modifier les paramètres de légendes, il vous faut utiliser les fonctions scale_* (http://ggplot2.tidyverse.org/reference/ ... anual.html) et notamment les arguments "breaks" et "labels".

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

Sébastien Giroud
Messages : 2
Enregistré le : 20 Déc 2017, 15:55

Re: Légende - Finition du graphie

Messagepar Sébastien Giroud » 22 Déc 2017, 12:26

Merci beaucoup Mickael pour votre réponse.

J'aimerais bien pouvoir donner un code reporductible, mais j'importe 4 fichiers de données de séquençage, dont un analysé par la package Phyloseq, que je ne peux malheureusement pas vous mettre sur ce forum. Mon code fait en tout une centaine de lignes pour définir toutes mes données et je n'ai pas de problèmes avec cette partie là.
Le seul problème reste la définition des légendes .

La fonction plot_bar n'a pas été défine, mais comme j'utilise le package ggplot2, je suppose que plot_bar a la même fonction que ggplot, à savoir créer un barplot. Avec ta réponse, j'ai tenté le code suivant:

Code : Tout sélectionner

cols <- c("Acetate" = "orange", "Met" = "blue", "All" = "gold", "CO2" = "green", "UK"="pink", "MeOH"="turquoise")
p <- ggplot(bs_food.norm , "Depth", fill="Species",  title = "Black Sea")
p <- p + geom_bar(aes( fill = factor(Species, levels=c("CO2","All", "Acetate", "UK", "MeOH", "Met"))), stat = 'identity', position = 'stack')
p <- p + ylab("Relative abundance (% of total sequences)")
p <- p + coord_flip()
p <- p + xlim(320,-10)
p <- p + theme(legend.position="right")
p <- p + scale_colour_manual(
  values = cols,   #expression(paste("CO"[2]*" + H"[2])), si labels fonctionne
  breaks = c("CO2","All", "Acetate", "UK", "MeOH", "Met"),
  labels = c("CO2", "Omnivore", "Acetate", "Unknown", "Methanol", "Methane")
)
p <- p + guides(fill = guide_legend(title="Substrates", levels=c("CO2","All", "Acetate", "UK", "MeOH", "Met")))
p


Mais aucune différence dans le plot final. Est-ce que j'ai mal interprété la fonction scale ?

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

Re: Légende - Finition du graphie

Messagepar Mickael Canouil » 02 Jan 2018, 12:57

Bonjour,

il ne s'agit pas d'avoir le jeu de données en entier, mais un extrait, par exemple les 25 premières lignes

Code : Tout sélectionner

dput(head(bs_food.norm, 25))


A défaut, voici un jeu de données fictif et un exemple de code:

Code : Tout sélectionner

library(tidyverse)

levelOrder <- c("CO[2]+H[2]" = "CO2", "Omnivore" = "All", "Acetate" = "Acetate",  "Unknown" = "UK", "Methanol" = "MeOH", "Methane" = "Met")
cols <- c("Acetate" = "orange", "Met" = "blue", "All" = "gold", "CO2" = "green", "UK" = "pink", "MeOH" = "turquoise")[levelOrder]

bs_food.norm <- data.frame(
        ID = rep(seq_len(5), each = length(levelOrder)),
        DepthRaw = runif(length(levelOrder)*5, min = 0, max = 1),
        Species = unname(levelOrder)
    ) %>%
    group_by(ID) %>%
    mutate(Depth = DepthRaw/sum(DepthRaw)) %>%
    data.frame

ggplot(data = bs_food.norm , aes(x = ID, y = Depth, fill = factor(Species, levels = levelOrder))) +
    geom_bar(stat = 'identity', position = 'stack') +
    labs(y = "Relative abundance (% of total sequences)", title = "Black Sea") +
    coord_flip() +
    scale_fill_manual(
        name = "Substrates",
        values = cols,
        breaks = levelOrder,
        labels = lapply(names(levelOrder), function (x) {parse(text=x)})
    )


Image

Cordialement,
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é