2016-09-25 34 views
0

我試圖將文本打印限制爲條形圖中的一個變量。我該如何標籤粉色欄601, 215, 399, 456在ggplot2中僅顯示一個文本值

ggplot(df, aes(Var1, value, label=value, fill=Var2)) + 
    geom_bar(stat="identity", position=position_dodge(width=0.9)) + 
    geom_text(position=position_dodge(width=0.9)) 

enter image description here

structure(list(Var1 = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 
            4L, 1L, 2L, 3L, 4L), .Label = c("Zero", "1-30", "31-100", "101+" 
           ), class = "factor"), Var2 = structure(c(1L, 1L, 1L, 1L, 2L, 
                      2L, 2L, 2L, 3L, 3L, 3L, 3L), .Label = c("Searches", "Contact", 
                                "Accepts"), class = "factor"), value = c(21567, 215, 399, 456, 
                                          13638, 99, 205, 171, 5806, 41, 88, 78)), .Names = c("Var1", "Var2", 
                                                       "value"), row.names = c(NA, -12L), class = "data.frame") 

回答

2

您可以在geom_text一個ifelse語句做到這一點。首先,從主ggplot2調用中刪除label=value。然後,在geom_text中,在label上添加ifelse條件,如下所示。另外,如果您要避開一種以上的審美,您可以通過創建一個閃避對象來節省一些打字。

pd = position_dodge(0.9) 

ggplot(df, aes(Var1, value, fill=Var2)) + 
    geom_bar(stat="identity", position=pd) + 
    geom_text(position=pd, aes(label=ifelse(Var2=="Searches", value,""))) 

如果你想在酒吧中間的文本,而不是在頂部,你可以這樣做:

geom_text(position=pd, aes(label=ifelse(Var2=="Searches", value, ""), y=0.5*value)) 

實際上,你可以保持label聲明(與ifelse條件加)在主ggplot調用,但由於label只適用於geom_text(或geom_label),我通常保持與geom而不是主要通話。