2013-12-10 3 views
0

Когда я загрузки данных из Google Trend, набор данных выглядит следующим образом:Google Trends и недели, ggplot2

    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 

Как я могу изменить даты в «Неделе» из этого формата «Ymd - Ymd» в формат «Год-неделя»?

Кроме того, как я могу сказать 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") 

Теперь каждый второй год обозначен (2004, 2006, ...) в оси х. Как я могу объявить ggplot каждый год (2004, 2005, ...)?

+0

Ваш пример данных немного трудно кормить, чтобы R из-за пробелов в значениях «Неделя». Взгляните на [Как сделать отличный воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) для других способов предоставить пример из данных, которые вы используете, особенно в этом случае, возможно, лучше использовать результаты 'dput (head (my.data.frame))' – MattLBeck

ответ

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) 

EDIT:

Чтобы ответить на дополнительный вопрос, добавьте следующую строку в ваш объект ggplot:

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

Отлично, спасибо! Но как я могу сказать ggplot, чтобы строить каждый второй год, а не каждый год? – feder80

+0

@ feder80 Чтобы ответить на этот вопрос, вам нужно привести пример того, как вы используете ggplot2 и какой график вы планируете. – MattLBeck

+0

ggplot (тенденции, aes (неделя, значение, цвет = переменная, группа = переменная)) + geom_line() + ylab ("Trends") + theme (legend.position = "top", legend.title = element_blank() , panel.background = element_rect (fill = "#FFFFFF", color = "# 000000")) + scale_color_manual (значения = c ("# 999999", "# E69F00", "# 56B4E9", "# 009E73")) + stat_smooth (method = "loess") – feder80

Смежные вопросы