2013-02-19 47 views
0

是否可以使用R将日期添加到ggplot图形上(图形数据基于该图形)?我有一段代码可以在一周内选择最多的日常数据,然后再绘制出来。示例数据框(from a previous answer)如下所示:将数据帧中的日期输出到ggplot图形中

set.seed(1234) 
df <- data.frame(Date=seq(as.POSIXct("05:00", format="%H:%M"), 
          as.POSIXct("23:00", format="%H:%M"), by="hours")) 
df$Counts <- sample(19) 
df <- df[-c(4,7,17,18),] 

# generate the groups automatically and plot 
idx <- c(1, diff(df$Date)) 
i2 <- c(1,which(idx != 1), nrow(df)+1) 
df$grp <- rep(1:length(diff(i2)), diff(i2)) 
g <- ggplot(df, aes(x=Date, y=Counts)) + geom_line(aes(group = grp)) + 
    geom_point() 
g 

我知道我可以使用下面的代码来获得R键制定出一周中的一天,我的数据是:

d <- as.Date("19/02/2013","%d/%m/%Y") 
format(d, "%A, %b %d, %Y") 

但我明显必须手动输入日期才能工作。

是否有可能让R读取数据帧并计算出数据基于的星期几(将只有一天),然后将其添加为右上角的图例图表?理想的格式将包括日期和日期(例如2013年2月19日星期二)。

编辑

我想把日期添加为图形文字。我可以使用geom_text吗?这是目前不工作,但到目前为止,我得到了:

g + geom_text(aes(x=as.POSIXct("18:00:00", format="%H:%M:%S"), y=1500), label=date_format("%A, %b %d, %Y")", size=2) 

任何人都可以告诉我我做错了什么?

+0

不知道这是否是你想要的,但你为什么不只是传递'$ DF向Date'的格式为你传递'D',如:'格式( as.Date(df $ Date,“%d /%m /%Y”),“%A,%b%d,%Y”)' – Arun 2013-02-19 12:33:04

回答

2

正如阿伦建议(见注释),你可以,你可以格式化你的输入数据或格式化添加到当前情节:

library(scales) 
g+ scale_x_datetime(labels = date_format("%A, %b %d, %Y")) 

编辑

我猜你要来注释添加日期指示器的图形

由于您将添加单个日期,因此您可以使用annotate,它比使用geom_text更好,它会覆盖多个日期。例如:

label <- unique(format(as.Date(df$Date, "%d/%m/%Y"), 
           "%A, %b %d, %Y")) 
g+ annotate("text", x = mean(df$Date), y = 20, 
     label = label,size=20, col='red') 

enter image description here

+0

非常感谢@agstudy。我的x轴目前很满,所以我希望能够使用geom_text?我已经添加了一些目前没有用到我原来的问题中的代码。 – 2013-02-19 14:10:24

+0

geom_text会添加许多日期..你想只用一个日期注释你的情节? – agstudy 2013-02-19 14:23:56

+0

@ KT_1你可以看到我的编辑。 – agstudy 2013-02-19 14:33:24