【问题标题】:ggplot2 sorting a plot Part IIggplot2 排序图第二部分
【发布时间】:2010-09-24 21:13:16
【问题描述】:

我有一个融化的 data.frame,dput(x),如下:

## dput(x)    
x <- structure(list(variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 
4L, 4L), .Label = c("a", "b", "c", "d"), class = "factor"), 
value = structure(c(1L, 
2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 
6L, 1L, 2L, 3L, 4L, 5L, 6L), .Label = c("Never Heard of", 
"Heard of but Not at all Familiar", 
"Somewhat Familiar", "Familiar", "Very Familiar", "Extremely Familiar"
), class = "factor"), freq = c(10L, 24L, 32L, 90L, 97L, 69L, 
15L, 57L, 79L, 94L, 58L, 19L, 11L, 17L, 34L, 81L, 94L, 85L, 4L, 
28L, 59L, 114L, 82L, 35L)), .Names = c("variable", "value", "freq"
), row.names = c(NA, -24L), class = "data.frame")

看起来像这样(对于那些不需要测试集的人):

   variable                            value freq
1         a                   Never Heard of   10
2         a Heard of but Not at all Familiar   24
3         a                Somewhat Familiar   32
4         a                         Familiar   90
5         a                    Very Familiar   97
6         a               Extremely Familiar   69
7         b                   Never Heard of   15
8         b Heard of but Not at all Familiar   57
9         b                Somewhat Familiar   79
10        b                         Familiar   94
11        b                    Very Familiar   58
12        b               Extremely Familiar   19
13        c                   Never Heard of   11
14        c Heard of but Not at all Familiar   17
15        c                Somewhat Familiar   34
16        c                         Familiar   81
17        c                    Very Familiar   94
18        c               Extremely Familiar   85
19        d                   Never Heard of    4
20        d Heard of but Not at all Familiar   28
21        d                Somewhat Familiar   59
22        d                         Familiar  114
23        d                    Very Familiar   82
24        d               Extremely Familiar   35

现在,我可以制作一个类似这样的漂亮情节:

ggplot(x, aes(variable, freq, fill = value)) + 
geom_bar(position = "fill") + 
coord_flip() + 
scale_y_continuous("", formatter="percent")

问题

我想做的是按“非常熟悉”的最高到最低“频率”对a、b、c、d进行排序

?relevel?reorder 没有为此用法提供任何建设性示例。

感谢您的帮助。

干杯,

BEB

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    这是另一种方法:

    tmp <- subset(x, value=="Extremely Familiar")
    x$variable <- factor(x$variable, levels=levels(x$variable)[order(-tmp$freq)])
    

    【讨论】:

      【解决方案2】:

      这是一种方法:

      tmpfun <- function(i) {
          tmp <- x[i,]
          -tmp[ tmp$value=='Extremely Familiar', 'freq' ]
      }
      
      x$variable <- reorder( x$variable, 1:nrow(x), tmpfun )
      

      【讨论】:

      • 它是如此接近!有没有办法颠倒这个顺序? (在某处添加减号?)当我使用 coord_flip() 时,它会以相反的方向对其进行排序。
      • 要颠倒排序删除 tmpfun 定义中的减号。
      猜你喜欢
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      相关资源
      最近更新 更多