Google趋势和周刊,ggplot2

时间:2013-12-10 13:27:03

标签: r date ggplot2

当我从Google Trend下载数据时,数据集如下所示:

                 Week   nuclear atomic  nuclear.weapons unemployment
2004-01-04 - 2004-01-10    11    11        1    15
2004-01-11 - 2004-01-17    11    13        1    13
2004-01-18 - 2004-01-24    10    11        1    13

如何将“周”中的日期从“Y-m-d-Y-m-d”更改为“年 - 周”格式?

此外,我怎么能告诉ggplot,只有年份是在x轴上打印而不是x的所有值?

@Mattrition:谢谢。我听从你的建议:

trends <- melt(trends, id = "Woche", 
    measure = c("nuclear", "atomic", "nuclear.weapons", "unemployment"))
trends$Week<- gsub("^(\\d+-\\d+-\\d+).+", "\\1", trends$Week)
trends$Week <- as.Date(trends$Week)

ggplot(trends, aes(Week, value, colour = variable, group=variable)) + 
  geom_line() + 
  ylab("Trends") +
  theme(legend.position="top", legend.title=element_blank(), 
      panel.background = element_rect(fill = "#FFFFFF", colour="#000000"))+
  scale_color_manual(values=c("#999999", "#E69F00", "#56B4E9", "#009E73"))+
  stat_smooth(method="loess")

现在,每隔一年在x轴上贴上标签(2004年,2006年......)。我如何告诉ggplot每年贴标签(2004年,2005年,......)?

1 个答案:

答案 0 :(得分:1)

如果您可以将日期转换为此格式,

ggplot会理解Date个对象(请参阅?Date)并制定适当的标签。

您可以使用gsub之类的内容来提取每周的开始日期。这使用正则表达式匹配第一个参数并返回括号集内的任何内容:

df$startingDay <- gsub("^(\\d+-\\d+-\\d+).+", "\\1", df$Week)

然后在提取的日期字符串上调用as.Date()以转换为Date个对象:

df$date <- as.Date(df$startingDay)

然后,您可以使用日期对象绘制您想要绘制的内容:

g <- ggplot(df, aes(date, as.numeric(atomic))) + geom_line()
print(g)

编辑:

要回答您的其他问题,请将以下内容添加到您的ggplot对象中:

library(scales)
g <- g + scale_x_date(breaks=date_breaks(width="1 year"), 
    labels=date_format("%Y"))