在ggplot2 geom_bar中重新排序因子计数数据

时间:2018-09-07 09:32:16

标签: r

如果使用ggplot2 (geom_bar)读取stat="identity"的数据帧,我发现无数示例将X按相应的Y大小重新排序。

我还没有找到stat="count"的例子。重新排序功能失败,因为我没有相应的y

我有一个因子分解因数(DF)为一列"count"(有关不良示例,请参见下文),其中有您期望的多个数据实例。但是,我希望能够显示分解数据:

ggplot(df, aes(x=df$count)) + geom_bar() 

由每个因子的数量定义的顺序,因为它与未分解的(character)数据不同,即将按字母顺序显示。

任何想法如何重新排序?

这是我目前的艰苦努力,可悲的是我昨晚发现了这个问题,然后丢失了我的R命令历史记录: enter image description here

2 个答案:

答案 0 :(得分:0)

将计数转换为一个因子,然后修改该因子可能有助于完成所需的工作。在下面的内容中,我将使用fct_rev包(forcats的一部分)中的tidyverse反转计数的顺序

library(tidyverse)
iris %>%
  count(Sepal.Length) %>% 
  mutate(n=n %>% as.factor %>% fct_rev) %>% 
  ggplot(aes(n)) +  geom_bar()

或者,如果希望将条形从大到小排列,则可以使用fct_infreq

iris %>%
  count(Sepal.Length) %>% 
  mutate(n=n %>% as.factor %>% fct_infreq) %>% 
  ggplot(aes(n)) +  geom_bar()

答案 1 :(得分:0)

如果你从加载 tidyverse 开始你的项目,我建议你使用内置的 tidyverse 函数:fct_infreq()

ggplot(df, aes(x=fct_infreq(df$count))) + geom_bar()

由于您的类别是单词,请考虑添加 coord_flip() 以便您的条形水平运行。

ggplot(df, aes(x=fct_infreq(df$count))) + geom_bar() + coord_flip()

这是一些鱼类计数的样子:A horzontal bar chart with species on the y axis (but really the flipped x-axis) and counts on horizontal axis (but actually the flipped y-axis). The counts are sorted from least to greatest.