2012-10-09 174 views
1
一起情節值標籤

可能重複:
Showing data values on stacked bar chart in ggplot2與酒吧

我有以下ggplot

enter image description here

dt <- structure(list(Age.group = structure(1:5, .Label = c("0-29 yrs", "30-49 yrs", "50-64 yrs", "65-79 yrs", "80+ years"), class = "factor"),  Rx.Brufen = c(4.91767279891635, 24.849329416471, 39.384529665324,  42.0512030516413, 45.0282816501013), Brufen.C.I = c(9.49857407873833,  10.4942035949849, 11.0935906177108, 16.7322917304551, 18.5232702433842 ), Brufen.declined = c(1.25219908256281, 1.1156980249761,  1.18510539437499, 0.73845826559561, 1.00121613129538)), .Names = c("Age.group", "Rx.Brufen", "Brufen.C.I", "Brufen.declined"), row.names = c(NA, -5L), class = "data.frame") 

dt.m <- melt(dt, 1) 

colnames(dt.m)[2] <- "Rx" 
colnames(dt.m)[3] <- "Proportion" 
ggplot(dt.m, aes(x=Age.group,y=Proportion, fill=Rx)) + 
    geom_bar() + 
    labs(x="Age Group", y="Proportion %",fill = "") + 
    theme(legend.position=c(.5, .9), legend.direction = "horizontal") + 
    ylim(c(0,100)) 

我想李可以將實際值繪製爲百分比(綠色和紅色條的條形內部,以及藍色條的上面,因爲它們不適合內部)。有人可以建議如何實現這一目標嗎?

+0

是你確定功能主題()? – Ali

+0

@AliSharifi,對不起,我不明白你的問題。肯定是什麼?主題()是定位傳說我想........? –

回答

3
p <- ggplot(dt.m, aes(x=Age.group,y=Proportion, fill=Rx)) + 
geom_bar() + 
labs(x="Age Group", y="Proportion %",fill = "") + 
theme(legend.position=c(.5, .9), legend.direction = "horizontal") + 
ylim(c(0,100)) 

library(plyr) 
dt.m.text <- ddply(dt.m, .variables="Age.group", transform, text.y=cumsum(Proportion)) 
p+geom_text(data=dt.m.text, aes(x = Age.group, y = text.y, label = round(Proportion))) 
#close 

dt.m.text <- ddply(dt.m, .variables="Age.group", transform, text.y = cumsum(Proportion)-1/2*Proportion) 
p+geom_text(data=dt.m.text, aes(x=Age.group,y=text.y, label=round(Proportion))) 

#manually increase Brufen.declined 
up <- dt.m.text[dt.m.text$Rx=="Brufen.declined","text.y"] 
dt.m.text[dt.m.text$Rx=="Brufen.declined","text.y"] <- up + 1 
p+geom_text(data=dt.m.text, aes(x=Age.group,y=text.y, label=round(Proportion))) 
0

添加這個您已經定義了數據dt找到標籤位置之後 - 因爲你需要:

p=dt 
p[,4]=p[,4]+p[,3]+p[,2] 
p[,3]=p[,3]/2+p[,2] 
p[,2]=p[,2]/2 
p.m = melt(p) 
colnames(p.m)[2:3]=c("Rx","Proportion") 

而這部分添加到您的ggplot命令:

+ geom_text(aes(Age.group, `Proportion`, label = sprintf("%2.1f", `Proportion`)), data=p.m)