我有以下代码,我想从XXX数据集中绘制条形图,并在其中对X2变量进行排序:
XXX %>% arrange(desc(X2)) %>%
ggplot(aes(x = X1, y = X2)) +
geom_bar(stat = "identity", width = 0.75) +
coord_flip()
为什么不起作用?我有相同的情节,就像没有range(desc(X2))。我已经知道如何进行安排,但是我想了解为什么这不是一个合适的解决方案。
答案 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()
应该产生想要的情节。