我想在使用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))
我希望条形从左数到右数的顺序排列。
答案 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))
答案 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