我在使用ggplot绘制堆积的条形图时遇到问题。我的数据如下:
timeInterval TotalWilling TotalAccepted SimID
1 16 12 Sim1
1 23 23 Sim2
1 63 60 Sim3
1 69 60 Sim4
1 61 60 Sim5
1 60 54 Sim6
2 16 8 Sim1
2 23 21 Sim2
2 63 52 Sim3
2 69 64 Sim4
2 61 45 Sim5
2 60 32 Sim6
3 16 14 Sim1
3 23 11 Sim2
3 63 59 Sim3
3 69 69 Sim4
3 61 28 Sim5
3 60 36 Sim6
我想在timeInterval
上为每个simID绘制一个堆叠的条形图,并且应该堆叠Willing
和Accepted
。我使用以下简单代码实现了条形图:
dat <- read.csv("myDat.csv")
meltedDat <- melt(dat,id.vars = c("SimID", "timeInterval"))
ggplot(meltedDat, aes(timeInterval, value, fill = variable)) + facet_wrap(~ SimID) +
geom_bar(stat="identity", position = "stack")
我的问题是我想在每个堆栈上加上百分比。这意味着,我想把百分比作为意愿标签:(愿意/(愿意+接受))和接受部分,((接受/(接受+意愿)),以便我可以看到有多少百分比愿意多少是在堆叠的红色部分上接受45个,在每个堆叠的蓝色部分接受55个。我似乎无法实现这种标记。
任何提示都表示赞赏。
答案 0 :(得分:0)
从Showing data values on stacked bar chart in ggplot2
申请meltedDat <- melt(dat,id.vars = c("SimID", "timeInterval"))
meltedDat$normvalue <- meltedDat$value
meltedDat$valuestr <- sprintf("%.2f%%", meltedDat$value, meltedDat$normvalue*100)
meltedDat <- ddply(meltedDat, .(timeInterval, SimID), transform, pos = cumsum(normvalue) - (0.5 * normvalue))
ggplot(meltedDat, aes(timeInterval, value, fill = variable)) + facet_wrap(~ SimID) + geom_bar(stat="identity", position = "stack") + geom_text(aes(x=timeInterval, y=pos, label=valuestr), size=2)
另外,看起来您可能将某些变量编码为因子。