2015-10-27 50 views
0

我正在使用ggplot2 geom_bar製作一系列條形圖。每個城市都有三個數據點,我正在爲每個城市制作一個圖表。我想將每個圖表中的第二個和第三個條形圖標記爲前一個條形圖的百分比(例如,看起來像5,4,3的數據將讀取5,80%,75%)。geom_bar中的動態數據標籤

在這個數據中,我的價值應該是所有圖中條1的標籤。 dum2/dum1 * 100應該是dum2值欄的標籤。 dum3/dum2 * 100應該是值爲dum3的欄的標籤。

State <- c("AA","AB","AC","AD","AE") 
dum1 <- c(34, 30, 8, 22, 5) 
dum2 <- c(22.5, 28.1, 3, 12, 1) 
dum3 <- c(12.8, 23, 2.8, 11.9, 0.3) 
df <- data.frame(State, dum1, dum2, dum3) 
m1 <-melt(df) 

for(i in levels(m1$State)) 
p <- ggplot(subset(m1, State==i), aes(variable, value, fill = variable)) + 
facet_wrap(~ State) + 
geom_bar(stat="identity", show_guide=FALSE) + 
geom_text(aes(x=variable, y=value + 2, label=round(value,digits=0)), vjust=0, 
     size=30) + 
theme(axis.title.x = element_blank(), 
    plot.background = element_rect(fill = "transparent", color=NA), 
    panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
    panel.border = element_blank(), panel.background = element_blank(), 
    axis.line = element_blank(), axis.title.y=element_blank(), 
    axis.line = element_blank(), 
    axis.text.x = element_blank(), 
    axis.text.y = element_blank(), 
    axis.ticks = element_blank(), 
    axis.title.y = element_blank(), 
    strip.text.x = element_blank(), 
    strip.background = element_rect(fill="transparent") 
    ) + 
    scale_y_continuous(limits=c(0,40)) + 
    scale_fill_manual(values=c("navy", "coral", "gold")) + 
    ggsave(sprintf("plot %s.jpg", i)) 

我已經嘗試添加與該行相關的計算百分比列,但不知道如何調用一個列在圖上唯一入選的數據點。我使用類似

lab<-c(0,0,0,0,0,66.2,93.7,37.5,54.5,20.0,56.9,81.9,93.3,99.2,30.0) 

但無法弄清楚如何正確調用它適當的酒吧。

+1

爲什麼不直接與第一條應與被標記的數字代替0? (c(dum1,dum2/dum1 * 100,dum3/dum2 * 100),1) – janattack

回答

1

沒有所有多餘的格式,這似乎做你問:

ggplot(subset(m1, State=="AA"), aes(variable, value, fill = variable)) + 
    facet_wrap(~ State) + 
    geom_bar(stat="identity", show_guide=FALSE) + 
    geom_text(aes(x=variable, y=value + 2, 
       label=paste0(round(value/c(1,0.01*head(value,-1))),c("","%","%"))))