2016-03-28 14 views
0

Ich habe ein Problem in Bezug auf das Zeichnen von gestapelten Barplots mit ggplot. Meine Daten scheint wie folgt aus:geom_bar etikettieren für geschmolzene Daten/stacked barplot

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 

Ich möchte eine gestapelte BarPlot für jede SIMID über einen TimeInterval ziehen, und Willing und Angenommenen gestapelt werden sollen. Ich erreiche Balkendiagramm mit dem folgenden einfachen Code:

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

ich folgendes Diagramm: enter image description here

Hier mein Problem ist, dass ich Prozent möchte auf jeden Stapel setzen. Das heißt, ich möchte einen Prozentsatz wie bei Willing Label setzen: (Willing/(Willing + Accepted)) und für Accepted Part ((Accepted/(Accepted + Willing)), damit ich sehen kann wieviele Prozent bereit sind wie viele sind accepted wie 45 auf roten Teil des Stapels 55 auf für jeden Stapel blau Teil. ich kann nicht scheinen, diese Art von Markierung zu erreichen.

jeder Hinweis ist willkommen.

Antwort

0

von Showing data values on stacked bar chart in ggplot2 angewandt

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) 

auch, es sieht so aus, als ob Sie einige Ihrer Variablen als Faktoren codiert haben könnten

+0

Dies dient nicht dem, was ich gerne tun würde, aber ich kann damit spielen, um mich so zu verändern, wie ich es möchte. Vielen Dank für den Hinweis. @ fanli – kukushkin