根据多个因素对 geom_bar 中的柱重新排序

Reorder bars in geom_bar by multiple factors

我希望我的图按其最高列值排序,但对于多个变量:首先是 vs,然后是 s,然后是 us 和 within 它的值。 IE。第一个条显示 ID 14,VS 中有 2 个计数,然后是 ID 10,然后是 ID 16(因为 10 的 S 值高于 16)。 我遇到了重新排序功能。但是我的代码甚至没有为一个值重新排序...

# use data from library(MM) and melt
data(wilson, package = "MM")
non_met <- as.data.frame(non_met)
non_met$ID <- seq(1,nrow(non_met))
mhouse <- melt(non_met, id=c("ID"))

ggplot(mhouse, aes(x=reorder(ID, -value), y=value, fill = variable)) + 
  geom_bar(stat = "identity", lwd=0.5, color="white")

接下来我试图改变我的因素,但这只是颠倒了着色

mhouse$variable <- factor(mhouse$variable, levels=c("VS","S","US"))
head(mhouse[order(mhouse$variable, -mhouse$value),])

#   ID variable value
#50 14       VS     2
#45  9       VS     1
#46 10       VS     1
#52 16       VS     1
#37  1       VS     0
#38  2       VS     0

(顺序还是不太对)

是的,这是一个解决方案:

data(wilson, package = "MM")
non_met <- as.data.frame(non_met)
non_met$ID <- seq(1,nrow(non_met))
non_met <- non_met[order(-non_met$VS, -non_met$S, -non_met$US),]
non_met$order <- seq(1,nrow(non_met))
mhouse <- melt(non_met, id=c("ID", "order"))

ggplot(mhouse, aes(x=reorder(ID, order), y=value, fill = variable)) + 
  geom_bar(stat = "identity", lwd=0.5, color="white")

但我对关于该问题的任何其他想法持开放态度