如何订购堆叠条形图

How to order a stack bar plot

我正在尝试按条的高度对堆叠的 geom_bar 或 geom_col 进行排序,但在 ggplot 的美学中安排我的数据集或使用“reorder()”不起作用,所以寻求帮助。这是我的数据集

df
Roost  NGen Sex  
   <chr> <int> <chr>
 1 A1        2 unkwn
 2 A1        3 M    
 3 A1       10 F    
 4 A2        2 M    
 5 A2        3 F    
 6 AA1      12 unkwn
 7 AA1      24 M    
 8 AA1      29 F    
 9 AC-01     4 M    
10 AC-01     5 unkwn

当我绘制它时使用:

ggplot(df, aes(x= Roost, y= NGen, fill= Sex))+ geom_col()+  coord_flip()

条形是按栖息地的名称而不是条形的高度排序的

图片在此link 1: https://i.stack.imgur.com/cS7SB.png(我无法插入图片,因为我作为新用户没有足够的“声誉”点数。)

我尝试了以下代码来尝试按高度组织列

ggplot(df, aes(x= reorder(Roost,NGen), y= NGen, fill= Sex))+ geom_col()+  coord_flip()

代码确实以某种方式组织了数据,生成了下图

但是,如您所见,条形图并未按高度排列。如果我使用 geom_bar 或 geom_col.

结果是一样的

我也尝试过将 Roost 转换为因子并将 NGen 转换为数字并使用 aes(x= fct_reorder(Roost,NGen), y= NGen, fill= Sex) 但我没有得到想要的结果。

非常感谢任何线索

干杯,

戴安娜

对每个Roostarrange的数据计算NGen的总和,根据总和分配因子水平,然后绘制数据。

library(dplyr)
library(ggplot2)

df %>%
  group_by(Roost) %>%
  mutate(NGen_s = sum(NGen)) %>%
  ungroup %>%
  arrange(NGen_s) %>%
  mutate(Roost = factor(Roost, unique(Roost))) %>% 
  ggplot(aes(x= Roost, y= NGen, fill= Sex)) + 
  geom_col() +  coord_flip()