geom_bar标记融化数据/堆积条形图

时间:2016-03-28 18:14:41

标签: r ggplot2 label bar-chart stacked

我在使用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绘制一个堆叠的条形图,并且应该堆叠WillingAccepted。我使用以下简单代码实现了条形图:

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")

我得到以下图表:enter image description here

我的问题是我想在每个堆栈上加上百分比。这意味着,我想把百分比作为意愿标签:(愿意/(愿意+接受))和接受部分,((接受/(接受+意愿)),以便我可以看到有多少百分比愿意多少是在堆叠的红色部分上接受45个,在每个堆叠的蓝色部分接受55个。我似乎无法实现这种标记。

任何提示都表示赞赏。

1 个答案:

答案 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)

另外,看起来您可能将某些变量编码为因子。