2016-02-26 44 views
0

我正試圖標記ggplot2中分組的barplot中的每個條。每個組按日期彙總,每個日期有4個值(小節)。我已經看到並且實際上擁有我自己的代碼,可以正確標記單個負面和正面的橫條,但我無法獲得分組的條形圖正常工作。這些值始終在欄內結束。如何標記ggplot2中分組的barplot中每個條上的負值和正值

我的數據:

Date <- c("2016-02-19", "2016-02-20", "2016-02-21", "2016-02-22", "2016-02-23", "2016-02-24", "2016-02-25", "2016-02-26", "2016-02-27", "2016-02-28", 
"2016-02-29", "2016-03-01", "2016-03-02", "2016-03-03", "2016-03-04") 

Date <- as.Date(Date) 

Model1 <- c(-0.6, -0.2, 0.1, 0.1, 0.4, -0.2, -1.7, 0.7, 3.6, 2.0, NA, NA, NA, NA, NA) 

Model2 <- c(-0.5, -0.2, -0.5, 0.0, 0.0, -1.0, -0.9, 1.6, 3.6, -0.2, 2.1, 7.8, 3.5, -3.4, -8.1) 

Model3 <- c(-0.7, 0.0, 0.2, 0.4, 0.8, 0.6, 0.8, -0.4, -0.6, 0.2, 0.1, -0.9, -0.5, 0.1, 0.3) 

Model4 <- c(-0.4, -0.1, -0.2, -0.2, -0.7, -1.5, -1.5, -1.5, 0.1, 1.3, 1.1, 0.9, 0.2, -1.1, -1.7) 

df <- data.frame(Date, Model1, Model2, Model3, Model4) 

df <- melt(df, id.vars="Date", value.name="Value", variable.name = "model") 

的代碼我使用繪製:

dfplot <- ggplot(df, aes(x = Date, y = Value, fill = model)) + 
    geom_bar(position = "dodge",stat = "identity", aes(fill= model)) + 
    scale_fill_manual(values = c("red","blue", "dark green", "purple"))+ 
    geom_text(aes(label= Value),position = position_dodge(width = 0.9), 
    vjust = ifelse(df[,3]>=0, -0.5, 1) , size= 3) 

My result

正如你所看到的,值標籤不在頂部(或底部)的每個酒吧,我願意。有些是,但很多都不是。

當談到帶有正值的帶標籤分組的條形圖時,我看到使用position= position_dodge(width=0.9)是最好的方法,我同意這個例子。我用它獲得了最有成效的結果,但它並不完美。

我認爲我的問題在於我的vjust ifelse聲明。如果我將vjust作爲-0.5而不是ifelse語句,則所有正面的橫條實際上都標有正確的標籤,但負值仍在橫條內,但圖像實際上看起來比上面顯示的更乾淨。

有關如何解決此問題的任何想法?

感謝

回答

4

可以使用aes(x,y)代替vjust

geom_text(aes(label= Value, 
       x=Date, 
       y=Value+ifelse(Value>=0,0.01, -0.5)), 
      position = position_dodge(width = 0.9), 
      vjust = -0.5 , size= 3) 

enter image description here

+0

完美!非常感謝你。 – user3720887

相關問題