2014-05-23 49 views
-1

我試圖在geom_bar中放置標籤,但是我不能。geom_bar中的標籤錯誤

我的代碼

df <- data.frame(
uni = rep(c("D","E","F","G","H"),3), 
Var1 = factor(c(rep("A",5),rep("B",5),rep("C",5))), 
Freq = c(53.6,50.0,48.5,50.0,56.2,23.2,18.5,27.7,20.0,14.3,23.2,31.5,23.8,30.0,29.6)) 


df$label = paste(round(df$Freq,0),"%", sep = "") 
ggplot(data = df, aes(x = uni, y = Freq, fill = Var1)) + 
geom_bar(stat = "identity",position = "fill", width = 1) + 
scale_fill_brewer(palette = 3) + geom_text(aes(y = Freq, label = label, position ="identity", face = "bold", size = 1), hjust=0.5, vjust=0.5) + 
xlab('') + 
ylab('') + 
labs(fill = '') + 
ggtitle('Example') + 
theme(axis.text.y = element_text(size=14,face="bold"), panel.background = element_blank(), plot.title = element_text(size = 20, colour = "black", face = "bold")) + 
guides(size=FALSE) 

return this

+0

您的代碼沒有產生都出現的情節,因此它被混淆你問什麼 –

回答

1

通過使用ddplyplyr pacakage,我們可以創建基於累計總和一個新的變量來獲得每個標籤的正確位置:

library(plyr) 
df <- data.frame(
    uni = rep(c("D","E","F","G","H"),3), 
    Var1 = factor(c(rep("A",5),rep("B",5),rep("C",5))), 
    Freq = c(53.6,50.0,48.5,50.0,56.2,23.2,18.5,27.7,20.0,14.3,23.2,31.5,23.8,30.0,29.6)) 

df = ddply(df, .(uni), transform, labPosition = cumsum(Freq)-Freq/2) 

df$label = paste(round(df$Freq,0),"%", sep = "") 
ggplot(data = df, aes(x = uni, y = Freq, fill = Var1)) + 
    geom_bar(stat = "identity", width = 1) + 
    scale_fill_brewer(palette = 3) + 
    geom_text(aes(y = labPosition, label = label, position ="identity"), hjust=0.5, vjust=0.5, size = 1, face = "bold") + 
    xlab('') + 
    ylab('') + 
    labs(fill = '') + 
    ggtitle('Example') + 
    theme(axis.text.y = element_text(size=14,face="bold"), panel.background = element_blank(), plot.title = element_text(size = 20, colour = "black", face = "bold")) + 
    guides(size=FALSE) 

這會按組創建累積和的新變量,然後將頻率本身除以2減去中心它在該部分的中間。

enter image description here

+0

非常感謝親愛的! – shasj