【问题标题】:How to reorder bars of ggplot2 bargraph? [duplicate]如何重新排序ggplot2条形图的条形? [复制]
【发布时间】:2016-04-22 12:30:31
【问题描述】:

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

这是我打算做的一个例子:

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

如您所见,第一个条形图名称以 8 开头,最后一个条形图名称以 1 开头。这不是我想要的,应该是相反的。这是正确的顺序:1. var,4. var,7. var 8. var。

有人知道怎么做吗?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    考虑 vars 列对我有用

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

    【讨论】:

      【解决方案2】:

      如果您想反转条形的顺序,可以将它们转换为因子,然后反转因子的顺序。

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

      这就是你要找的吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-21
        • 2015-10-14
        • 1970-01-01
        • 2021-10-02
        相关资源
        最近更新 更多