2013-05-09 84 views
2

我有一個ggplot2圖,其中x軸上的日期時間和y軸上的分類時間。我需要在x軸的特定日期放置9個文本註釋,但是沒有空間將註釋放入圖形本身。我想在x軸上保留自動生成的日期,並添加我的自定義標籤。我不在乎他們是在頂部還是底部。在ggplot2中添加軸註釋

下面的合成示例。我有9個活動,以及導致這些活動的大量活動。我想在每個事件下面放置一個文本標籤,指出事件名稱。例如,在2月11日午夜的這個數據中,我希望有一個標籤在某處說「事件1」。

events <- data.frame(names=c("Event 1", "Event 2", "Event 3", "Event 4", "Event 5", "Event 6", "Event 7", "Event 8", "Event 9"), 
         dates=strptime(c("2013-02-10 11:59 pm", "2013-02-21 11:59 pm", "2013-03-02 11:59 pm", "2013-03-16 11:59 pm", "2013-03-26 12:00 pm", "2013-04-11 11:59 pm", "2013-04-24 11:59 pm", "2013-04-23 11:59 pm", "2013-05-08 12:00 pm") 
             , "%Y-%m-%d %I:%M %p")) 
units <- replicate(125, paste(sample(LETTERS, 8), collapse="")) 
n <- 2000 
df <- data.frame(name=sample(units, n, replace=TRUE), 
      d=(sample(events$dates, n, replace=TRUE)-rexp(n, 1/150000)), 
      value=rexp(n, 1/110)) 

ggplot(data=df, aes(x=d, y=name)) + 
    geom_point(alpha=I(1/2), aes(size=log(value))) + 
    ylab("Each row is one unit") + 
    xlab("Date") + 
    theme(legend.position="none", legend.direction="horizontal", 
      axis.text.y=element_blank(), 
      axis.ticks.y=element_blank(), 
      axis.line.y=element_blank(), 
      panel.grid.major.y=element_blank(), 
      panel.grid.minor.y=element_blank()) 

Generated synthetic image

+3

[這裏](http://stackoverflow.com/questions/16279295/axis-labels-for-each-bar-and-each-group-in-bar-charts-with -dodged-groups/16279990#16279990)就是將文本置於特定位置下的示例。 – 2013-05-09 17:07:39

+0

@DidzisElferts謝謝!我解決了數據框問題,當時我錯過了重命名,顯然我的R會議仍然有它,所以我沒有注意到。代碼現在應該可以正常工作。 – chmullig 2013-05-09 17:48:44

回答

4

您可以使用geom_text()繪製裏面的情節標籤。由於x值使用dates在數據幀eventsy值設置一些負數來繪製點下的標籤。 使用vjust=hjust=您可以調整標籤的位置(日期的中心或左/右)。

ggplot(data=df, aes(x=d, y=name)) + 
    geom_point(alpha=I(1/2), aes(size=log(value))) + 
    geom_text(data=events,aes(x=dates,y=-5,label=names),inherit_aes=FALSE, 
      vjust=-1,hjust=0,size=3)+ 
    ylab("Each row is one unit") + 
    xlab("Date") + 
    theme(legend.position="none", legend.direction="horizontal", 
     axis.text.y=element_blank(), 
     axis.ticks.y=element_blank(), 
     axis.line.y=element_blank(), 
     panel.grid.major.y=element_blank(), 
     panel.grid.minor.y=element_blank()) 

enter image description here

+1

有用,但我真的更喜歡它低於(或高於)軸,因爲我的真實數據比模擬更混亂。標籤裏面的內容非常意味着我必須將其放大,就像你在這裏做的那樣,看起來有點奇怪。 – chmullig 2013-05-09 18:40:45