geom_bar中的排序值

时间:2018-08-24 07:44:48

标签: r ggplot2 plot bar-chart

我有以下代码,我想从XXX数据集中绘制条形图,并在其中对X2变量进行排序:

XXX %>% arrange(desc(X2)) %>%
   ggplot(aes(x = X1, y = X2)) +
   geom_bar(stat = "identity", width =  0.75) + 
   coord_flip()

为什么不起作用?我有相同的情节,就像没有range(desc(X2))。我已经知道如何进行安排,但是我想了解为什么这不是一个合适的解决方案。

1 个答案:

答案 0 :(得分:2)

arrange()只是对数据进行排序,但是ggplot会自己进行排序。如果X2是数字,但是对于文本可能有点出乎意料,这很方便。诀窍是以某种方式定义X2,即X2的自然顺序就是您想要的 顺序。例如,如果您希望通过降低频率对X2进行排序,则可以编写自己的函数,例如:

factor_freq <- function(x, decreasing = TRUE) {
  counts <- sort(table(x), decreasing = decreasing)
  factor(x, levels=names(counts))
}

然后

XXX %>% mutate(X2 = factor_freq(X2)) %>%
   ggplot(aes(x = X1, y = X2)) +
   geom_bar(stat = "identity", width =  0.75) + 
   coord_flip()

应该产生想要的情节。