2016-04-22 328 views
0

当我用coord_flip()翻转条形图时,我需要对条形图重新排序,但我不知道该怎么做。提到的解决方案here似乎不适用于我的数据,(或者我现在还没弄清楚)。如何重新排序ggplot2条形图的条形图?

这是什么我打算做一个例子:

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() 

正如你所看到的第一棒图名以八个开始,并用一个最后一个开始。这不是我想要的,它应该是相反的。这是正确的顺序:1. var,4. var,7. var 8. var。

有谁知道如何做到这一点?

回答

1

融通瓦尔柱对我的作品

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

如果你想扭转你的酒吧的顺序,可以将它们转换为因素,然后逆转的因素顺序。

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() 

这是你在找什么?