我正试图创建一个堆叠的身份图,但是ggplot2一直将我的数据集中在一起。
它不是为每个扇区提供每个类别的叠加图,而是将direct、indirect.down和indirect.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()我希望每个部门的冲击都是这样的:

发布于 2016-07-22 10:59:34
这是因为在您的示例数据中,每个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添加一些数据以在sector和shock之间创建更多关联:
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()

https://stackoverflow.com/questions/38523689
复制相似问题