2016-07-22 108 views
0

我试图创建一个堆叠的身份barplot,但ggplot2保持将我的数据集中在一起。ggplot2堆积条形图故障排除

不是为每个扇区提供每个类别的堆积图,而是将direct,indirect.downindirect.up类别聚合在一起。

test.df = data.frame(scenario=(c("s1", "s1", "s1", "s2", "s2", "s2", "s3", "s3", "s3", 
          "s1", "s1", "s1", "s2", "s2", "s2", "s3", "s3", "s3", 
          "s1", "s1", "s1", "s2", "s2", "s2", "s3", "s3", "s3")), 
       sector=(c("Agriculture", "Manufacturing", "Services", "Agriculture", "Manufacturing", "Services", "Agriculture", "Manufacturing", "Services", 
         "Agriculture", "Manufacturing", "Services", "Agriculture", "Manufacturing", "Services", "Agriculture", "Manufacturing", "Services", 
         "Agriculture", "Manufacturing", "Services", "Agriculture", "Manufacturing", "Services", "Agriculture", "Manufacturing", "Services")), 
       loss=(runif(27,0,1000)), shock=(c("direct", "indirect.up", "indirect.down","direct", "indirect.up", "indirect.down","direct", "indirect.up", "indirect.down", 
         "direct", "indirect.up", "indirect.down","direct", "indirect.up", "indirect.down","direct", "indirect.up", "indirect.down", 
         "direct", "indirect.up", "indirect.down","direct", "indirect.up", "indirect.down","direct", "indirect.up", "indirect.down"))) 

library(ggplot2) 

ggplot(test.df, aes(x=sector, y=loss)) + geom_bar(stat = "identity", aes(fill=shock)) + facet_wrap(~ scenario) + coord_flip() 

我希望它看起来像这样的如何冲击到每个部门堆叠方面:

enter image description here

回答

1

那是因为你的样本数据,每个sector只有一种的shock与之相关联。

table(test.df$sector, test.df$shock) 

#    direct indirect.down indirect.up 
# Agriculture  9    0   0 
# Manufacturing  0    0   9 
# Services   0    9   0 

添加一些数据来sectorshock之间创造一些更协会:

df2 <- test.df 

df2$shock[df2$shock == "indirect.down"] <- "indirect.up" 
df2$shock[df2$shock == "direct"] <- "indirect.down" 

test.df <- rbind(test.df, df2) 

table(test.df$sector, test.df$shock) 

#    direct indirect.down indirect.up 
# Agriculture  9    9   0 
# Manufacturing  0    0   18 
# Services   0    9   9 

测试你的代码现在:

library(ggplot2) 

ggplot(test.df, aes(x=sector, y=loss)) + 
geom_bar(stat = "identity", aes(fill=shock)) + 
facet_wrap(~ scenario) + coord_flip() 

enter image description here

+0

感谢Sumedh,我现在已经纠正问题。 –