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

时间:2017-05-02 15:14:56

标签: r ggplot2 bar-chart geom-bar

我按照这篇文章中给出的示例来创建分组和堆积的条形图:How to produce stacked bars within grouped barchart in R

从那篇文章:

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)

如上所述,该图在value3之上命令value2。

我想要做的是改变堆叠部分的顺序,即;我想将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)

但是情节输出与第一个相同。从本质上讲,输入数据的重新排序不能完成任务。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

这应该有用,虽然我不清楚你对这些顺序的确切顺序。但你可以使用等级来完成这个:

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)

之前使用的这种方法只按值排列值。

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

更适合连续矢量。您实际上需要更改因子的级别。您可以使用以下方法检查级别:

levels(melted$variable)
  

[1]“value1”“value3”“value2”

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