使用stat =“ count”时,geom_bar从高到低重新排序

时间:2019-06-14 13:56:41

标签: r ggplot2

我想在使用stat =“ count”时将geom_bar图从高到低重新排序,以便可以应用填充。

我尝试使用geom_bar(aes(x = reorder(x,-stat(count)),fill = type),但是它不起作用并抛出错误“ Error:stat_count需要以下缺失的美感:x” < / p>

library(ggplot2)
df <- data.frame(x = c("Bob", "James", "Mary", "Sally", "Timmy", "Sally", "Sally", "Bob", "Bob", "Mary"), type = c("A", "B", "A", "B", "B", "C", "B", "B", "A", "B"))
ggplot(df) +
  geom_bar(aes(x = x, fill = type), stat = "count") +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5))

我希望条形从左数到右数的顺序排列。

2 个答案:

答案 0 :(得分:2)

我不确定 ggplot2 解决方案,但是我会使用 forcats 软件包解决此问题。有一个fct_infreq()函数可以按频率顺序设置因子水平。

您可以这样做:

ggplot(df) +
    geom_bar(aes(x = forcats::fct_infreq(x), fill = type)) +
    theme(axis.text.x = element_text(angle = 90, vjust = 0.5))

enter image description here

答案 1 :(得分:2)

这是来自 ggplot2 reorder的解决方案:

首先,您需要按名称计数发生次数:

df2 <- df %>% group_by(x) %>%   mutate(count_name_occurr = n())

然后,当指定x轴时,您将通过降序出现的名称对x重新排序。

g2<-ggplot(data=df2, aes(x=reorder(x,-count_name_occurr), fill=type)) +
  geom_bar(stat="count")
g2