2012-07-12 38 views
10

我是ggplot2的新手,它很棒,但是我遇到了一件難事。將文本添加到ggplot2中具有X軸日期的小圖中

我已經繪製了一系列跨越一年的時間序列。 X軸來自類Date的變量。我已經刻畫了這個情節,以便在具有獨立Y軸的列中有7個時間序列。該圖形的全部要點是比較每個面與頂面的相關性。

我想要做的最後一件事是在每個方面的右上角添加文本(每個方面和第一個方面之間的估計皮爾遜相關性)。

這被證明是非常困難的,因爲geom_text()需要每個文本位的x和y座標。當X軸是日期並且Y軸對於每個面不同時,我該如何指定座標?下面是一些示例數據和代碼,我到目前爲止這樣你就可以複製我到目前爲止有:

library(ggplot2) 

date <- rep(as.Date(1:365,origin='2011-1-1'),7) 
location <- factor(rep(1:7,365)) 
product <- rep(letters[1:7], each=365) 
value <- c(sample(1:10, size=365, replace=T),sample(1:3, size=365, replace=T), 
      sample(10:100, size=365, replace=T), sample(1:50, size=365, replace=T), 
      sample(1:20, size=365, replace=T),sample(50:100, size=365, replace=T), 
      sample(1:100, size=365, replace=T)) 
dat<-data.frame(date,location,product,value) 

qplot(date, value, data=dat, geom="line", color=location, group=location, 
     main='Time Series Comparison', xlab='Month (2011)',ylab='Value') + 
     facet_grid(product ~ ., scale = "free_y") 
+0

@Andrie感謝您的編輯! – rnorberg 2012-07-12 19:43:18

回答

9

這還不是最巧妙的代碼,但我認爲這是有點像你以後:

library(plyr) 

corr_dat<-ddply(dat, .(product), summarise, value=value) 
corr.df<-unstack(corr_dat, value~product) 

corr_plot <- data.frame(date=max(dat$date), 
         label=paste0("rho==",round(cor(corr.df)[,1], 2)), 
         ddply(dat, .(product), summarise, 
          value=(min(value)+max(value))/2)) 

ggplot(dat, aes(x=date, y=value, color=location, group=location)) + 
    geom_line()+ 
    facet_grid(product ~ ., scale = "free_y")+ 
    geom_text(data=corr_plot, aes(x=date, y=value, label=label), 
      colour="black", inherit.aes=FALSE, parse=TRUE) 

Plot with expressions

+0

絕對完美!萬分感謝。出於好奇,'show.guide = FALSE'做了什麼? – rnorberg 2012-07-24 14:31:27

+1

'show.guide = FALSE'防止文字出現在圖例中。現在可能不再需要我將顏色設置爲黑色。我想,我會刪除它。 – 2012-07-25 01:16:17

相關問題