R 如何手动更改堆叠+分组ggplot条形图中刚堆叠部分的分组

R 如何手动更改堆叠+分组ggplot条形图中刚堆叠部分的分组,r,ggplot2,bar-chart,geom-bar,R,Ggplot2,Bar Chart,Geom Bar,我遵循本文中给出的创建分组和堆叠条形图的示例: 从该职位: library(reshape2) library(dplyr) library(ggplot2) test <- data.frame(person=c("A", "B", "C", "D", "E"), value1=c(100,150,120,80,150), value2=c(25,30,45,30,30) ,

我遵循本文中给出的创建分组和堆叠条形图的示例:

从该职位:

library(reshape2)
library(dplyr)
library(ggplot2)

test  <- data.frame(person=c("A", "B", "C", "D", "E"), 
                value1=c(100,150,120,80,150),     
                value2=c(25,30,45,30,30) , 
                value3=c(100,120,150,150,200)) 


melted <- melt(test, "person")

melted$cat <- ''
melted[melted$variable == 'value1',]$cat <- "first"
melted[melted$variable != 'value1',]$cat <- "second"


ggplot(melted, aes(x = cat, y = value, fill = variable)) + 
 geom_bar(stat = 'identity', position = 'stack') + 
 facet_grid(~ person)
如上所述,绘图将value2置于value3之上

我想做的是改变堆叠部分的顺序,即;我想把value3放在value2之上

我尝试手动更改变量的顺序:

melted2 <- melted %>% 
  arrange(desc(variable))

ggplot(melted2, aes(x = cat, y = value, fill = variable)) + 
 geom_bar(stat = 'identity', position = 'stack') + 
 facet_grid(~ person)
但绘图输出看起来与第一个相同。本质上,输入数据的重新排序并不能完成任务


提前谢谢你

这应该行得通,尽管我不清楚您希望这些产品的确切顺序。但您可以使用级别来实现这一点:

melted$variable <- factor(melted$variable, levels = c("value1","value3","value2"))

ggplot(melted, aes(x = cat, y = value, fill = variable)) + 
 geom_bar(stat = 'identity', position = 'stack') + 
 facet_grid(~ person)
[1] 值1值3值2


融化的$variable已经是一个因素,但您只需要将默认级别覆盖到您想要的级别

太好了!成功了。如果允许的话,我会在3分钟内接受答案。可能会重复或阅读我的帖子。我试着重新排序,如那篇文章所示。没有迹象表明你已经重新排序了级别-只是值。您需要明确地对因子级别进行排序。尝试?因素?或?重新排序。
melted2 <- melted %>% 
  arrange(desc(variable))
levels(melted$variable)