使用ggplot2在分面绘图中添加文本,其中X轴为日期。

12

我刚接触ggplot2,感觉非常棒,但有一件事让我困扰。我绘制了一些跨越一年的时间序列图。X轴是从一个Date类变量派生出来的。我将图形分面,以便在一列中有7个时间序列和独立的y轴。整个图形的重点是比较每个分面与顶部分面的相关性。

我想做的最后一件事是在每个分面的右上角添加文本(第一个分面与每个分面之间的估计pearson相关性)。这证明非常困难,因为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")
1个回答

12

这不是最整洁的代码,但我认为它有点像你想要的:

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)

使用表达式绘制的图


非常完美!非常感谢。出于好奇,show.guide=FALSE是什么意思? - rnorberg
1
show.guide=FALSE 防止文本出现在图例中。由于我将颜色设置为黑色,可能不再需要它了。我想我会把它删除。 - sebastian-c

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接