我试图创建一个堆叠的身份条形图,但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()
我希望它看起来像每个部门的冲击如何叠加:
答案 0 :(得分: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
添加一些数据以在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()