1
votes

Je souhaite modifier l'ordre d'un groupe dans un graphique à barres de groupe à l'aide de ggplot et avoir toutes mes étiquettes

J'ai besoin d'aide pour organiser les groupes et les étiquettes de mon graphe, voici mon code pour l'instant:

alphabet <- c("A", "A", "A", "A", "A", "A",    
              "C", "C", "C", "C", "C", "C", "B", "B", "B", "B", "B","B")    

amount <- c("1", "2", "3", "4", "5", "6", "1", "2", "3", "4", "5", "6", "1", "2", "3", "4", "5", "6")    

percentage <- c(30.3, 25.8, 21.2, 9.1, 9.1, 4.5, 23.1, 21.5, 9.2, 23.1, 13.9, 9.2, 27.8, 17.5, 14.3, 20.6, 14.3, 5.6)      

DataFrame.test <- data.frame(alphabet, amount, percentage)     

DataFrame.test  

library(ggplot2)
data <- read.table(
  header=TRUE, text='alphabet amount percentage
1         A       1       30.3
2         A       2       25.8
3         A       3       21.2
4         A       4        9.1
5         A       5        9.1
6         A       6        4.5
7         C       1       23.1
8         C       2       21.5
9         C       3        9.2
10        C       4       23.1
11        C       5       13.9
12        C       6        9.2
13        B       1       27.8
14        B       2       17.5
15        B       3       14.3
16        B       4       20.6
17        B       5       14.3
18        B       6        5.6')

bargraph <- ggplot(data, aes(x=amount, y=percentage, fill = alphabet)) + 
  geom_bar(stat="identity", position = position_dodge(0.70), width = 0.65) + 
  scale_fill_brewer(palette = "Set1") + labs(x = "amount", y= "percentage (%)")

bargraph + theme_minimal()

qui me donne le graphe suivant:

Pour le moment, les groupes sont classés par ordre alphabétique mais je voudrais qu'ils soient classés ( A, C, B). De plus, je n'ai que des étiquettes pour mes groupes pour 2, 4 et 6, mais je veux aussi des étiquettes pour 1, 3 et 5.

Toute aide serait très appréciée.

p>


0 commentaires

3 Réponses :


1
votes

Vous pouvez modifier votre ensemble de données comme ceci:

data$amount <- as.character(data$amount)
data$alphabet <- factor(data$alphabet, levels = c("A", "C", "B"))


1 commentaires

Merci, j'avais encore besoin d'ajouter ", a ordonné = TRUE" pour que cela fonctionne mais mon graphique a l'air bien maintenant.



0
votes

vous devez transformer l'alphabet et les variables de montant en variables de facteur et spécifier un ordre pour la variable d'alphabet. Comme ceci:

library(ggplot2)
data <- read.table(
  header=TRUE, text='alphabet amount percentage
1         A       1       30.3
2         A       2       25.8
3         A       3       21.2
4         A       4        9.1
5         A       5        9.1
6         A       6        4.5
7         C       1       23.1
8         C       2       21.5
9         C       3        9.2
10        C       4       23.1
11        C       5       13.9
12        C       6        9.2
13        B       1       27.8
14        B       2       17.5
15        B       3       14.3
16        B       4       20.6
17        B       5       14.3
18        B       6        5.6')
data$alphabet = factor(data$alphabet, levels = c('A', 'C', 'B'), ordered = TRUE)
data$amount = factor(data$amount, levels = 1:6, labels = c('label 1', 'label 2', 'label 3',
                                               'label 4', 'label 5', 'label 6'))
bargraph <- ggplot(data, aes(x=amount, y=percentage, fill = alphabet)) + 
  geom_bar(stat="identity", position = position_dodge(0.70), width = 0.65) + 
  scale_fill_brewer(palette = "Set1") + labs(x = "amount", y= "percentage (%)")

bargraph + theme_minimal()


0 commentaires

0
votes
DataFrame.test <- DataFrame.test %>%
  mutate(alphabet = factor(alphabet, levels = c("A", "C", "B")),
         amount = factor(amount, levels = 1:6))

bargraph <- ggplot(DataFrame.test, aes(amount, percentage, fill = alphabet)) +
  geom_bar(stat = "identity", position = position_dodge(0.70), width = 0.65) + 
  scale_fill_brewer(palette = "Set1") + labs(x = "amount", y= "percentage (%)")

bargraph + theme_minimal()

0 commentaires