我有以下图表
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))
我想为每个人绘制一个分组的条形图(水平),其中一个条形指示value1而另一个条形是堆栈的value2和value3。有没有办法用ggplot2做到这一点?我可以使用构面将这些单独的图形一个接一个地绘制下来吗?
答案 0 :(得分:33)
以下是我提出的内容,类似于此处提出的解决方案:stacked bars within grouped bar chart
融化data.frame
并添加新列cat
library(reshape2) # for melt
melted <- melt(test, "person")
melted$cat <- ''
melted[melted$variable == 'value1',]$cat <- "first"
melted[melted$variable != 'value1',]$cat <- "second"
绘制堆积图表cat
vs value
,面向person
。您可能需要调整标签以获得所需内容:
ggplot(melted, aes(x = cat, y = value, fill = variable)) +
geom_bar(stat = 'identity', position = 'stack') + facet_grid(~ person)