R堆积条重新排序不起作用

R stacked bar reordering not working

我正在尝试重新排序 R 中的堆叠条形图,其中最高的条形图位于左侧,最短的条形图位于右侧。这个问题很相似,但我相信与其他问题并不相同,因为从左到右对堆叠条形图进行排序的典型方法似乎不适用于我的数据。我使用的代码适用于我的其他数据集 ( x=reorder(aminoSet,-num) ),但在这种情况下它不起作用。我怎样才能正确安排这些酒吧?示例:

library(ggplot2)

s <- "aminoSet eth num
AE AFR 2
AK AFR 1
AL AFR 1
AT AFR 1
AV EAS 1
DE AFR 4
DE AMR 1
DE EAS 4
DE EUR 2
DE SAS 2
EK AFR 1
EK EAS 1
ER AFR 1
GT AFR 1
HS AFR 1
LS AFR 1
MP AFR 1
MP SAS 1
PS AFR 1
PS EAS 1
PT AFR 1
RS EAS 1"
counts <- read.delim(textConnection(s),header=T,sep = " ")


g <- ggplot(counts[order(counts$eth,decreasing=T),], aes(x=reorder(aminoSet,-num),group=num, y=num))
g + geom_bar(aes(fill = eth),stat = "identity") + theme_bw() + theme(text = element_text(size = 20)) + theme(axis.text.x=element_text(angle=90))

我得到以下图像,但从左到右的顺序不正确:

我认为问题是你根据 num 重新调整因子,默认是取平均值。所以对于 EK、MP 和 PS,那将是 1,但你希望它是 2。只需更改 reorder 中的函数,你就可以开始了。

counts %>% 
  mutate(aminoSet = reorder(aminoSet, -num, sum)) %>% 
  ggplot(aes(aminoSet, num)) + 
    geom_bar(stat = "identity", aes(fill = eth))