2016-04-22 4 views
0

Lorsque je retourne mon diagramme avec coord_flip(), j'ai besoin de réorganiser les bargraphs, mais je ne sais pas comment faire. La solution mentionnée here ne semble pas fonctionner sur mes données, (ou je n'ai pas encore compris comment).Comment réorganiser les barres du bargraph ggplot2?

Voici un exemple de ce que je veux faire:

library(ggplot2) 

df <- structure(list(vars = c("7. var", "7. var", "7. var", "7. var", 
"1. var", "1. var", "1. var", "1. var", "8. var", "8. var", "8. var", 
"8. var", "4. var", "4. var", "4. var", "4. var"), percentage = c(37, 
22, 41, 1, 4, 12, 49, 35, 13, 34, 30, 24, 1, 11, 32, 56), score = structure(c(1L, 
2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), .Label = c("1", 
"2", "3", "4"), class = "factor")), .Names = c("vars", "percentage", 
"score"), row.names = c(NA, 16L), class = "data.frame") 

ggplot(df, aes(x = vars, y = percentage, fill = score)) + 
    geom_bar(stat = 'identity', position = 'fill')+ 
    coord_flip() 

Comme vous pouvez le voir le premier nom de bargraphe commence par huit, et le dernier commence par un. Ce n'est pas ce que je voulais, ce devrait être l'inverse. C'est le bon ordre: 1. var, 4. var, 7. var 8. var.

Est-ce que quelqu'un sait comment faire cela?

Répondre

1

Affacturage la colonne vars fonctionne pour moi

library(ggplot2) 

df <- structure(list(vars = c("7. var", "7. var", "7. var", "7. var", 
"1. var", "1. var", "1. var", "1. var", "8. var", "8. var", "8. var", 
"8. var", "4. var", "4. var", "4. var", "4. var"), percentage = c(37, 
22, 41, 1, 4, 12, 49, 35, 13, 34, 30, 24, 1, 11, 32, 56), score = structure(c(1L, 
2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), .Label = c("1", 
"2", "3", "4"), class = "factor")), .Names = c("vars", "percentage", 
"score"), row.names = c(NA, 16L), class = "data.frame") 

df$vars <- factor(df$vars,levels=unique(sort(df$vars,decreasing=TRUE))) 

ggplot(df, aes(x = vars, y = percentage, fill = score)) + 
    geom_bar(stat = 'identity', position = 'fill')+ 
    coord_flip() 
1

Si vous voulez inverser l'ordre de vos barres, vous pouvez les convertir en facteur puis inverser l'ordre des facteurs.

df$vars <- as.factor(df$vars) 
df$vars <- factor(df$vars, levels = rev(levels(df$vars))) 

ggplot(df, aes(x = vars, y = percentage, fill = score)) + 
geom_bar(stat = 'identity', position = 'fill') + 
coord_flip() 

Est-ce ce que vous cherchez?