Временные ряды в R с ggplot2

Я новичок в ggplot2, и у меня довольно простой вопрос о графиках временных рядов.

У меня есть набор данных, в котором данные структурированы следующим образом.

      Area 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007
  MIDWEST   10    6   13   14   12    8   10   10    6    9

Как создать временной ряд, если данные структурированы в этом формате.

С пакетом reshape я мог бы просто изменить данные, чтобы они выглядели так:

totmidc <- melt(totmidb, id="Area")
totmidc

    Area    variable  value
1  MIDWEST     1998    10
2  MIDWEST     1999     6
3  MIDWEST     2000    13
4  MIDWEST     2001    14
5  MIDWEST     2002    12
6  MIDWEST     2003     8
7  MIDWEST     2004    10
8  MIDWEST     2005    10
9  MIDWEST     2006     6
10 MIDWEST     2007     9

Затем запустите следующий код, чтобы получить желаемый график.

ggplot(totmidc, aes(Variable, Value)) + geom_line() + xlab("") + ylab("")

Однако возможно ли создать график временных рядов из первого объекта, в котором столбцы представляют годы.


person ATMathew    schedule 11.02.2011    source источник


Ответы (2)


Какую ошибку выдает ggplot2? На моей машине работает следующее:

Area <-  as.numeric(unlist(strsplit("1998 1999 2000 2001 2002 2003 2004 2005 2006 2007", "\\s+")))
MIDWEST <-as.numeric(unlist(strsplit("10    6   13   14   12    8   10   10    6    9", "\\s+")))

qplot(Area, MIDWEST, geom = "line") + xlab("") + ylab("")

#Or in a dataframe

df <- data.frame(Area, MIDWEST)
qplot(Area, MIDWEST, data = df, geom = "line") + xlab("") + ylab("")

Вы также можете посетить веб-сайт ggplot2 для получения подробной информации о scale_date и др.

person Chase    schedule 11.02.2011

Я предполагаю, что под «графиком временных рядов» вы имеете в виду, что хотите получить гистограмму вместо линейной диаграммы?

В этом случае вам нужно лишь немного изменить свой код, чтобы передать правильные параметры функции geom_bar(). Статистика по умолчанию для geom_bar — stat_bin, которая будет подсчитывать частоту ваших категорий по шкале x. С вашими данными вы хотите переопределить это поведение и использовать stat_identity.

library(ggplot2)

# Recreate data
totmidc <- data.frame(
        Area = rep("MIDWEST", 10),
        variable = 1998:2007,
        value = round(runif(10)*10+1)
)

# Line plot
ggplot(totmidc, aes(variable, value)) + geom_line() + xlab("") + ylab("")

# Bar plot
# Note that the parameter stat="identity" passed to geom_bar()
ggplot(totmidc, aes(x=variable, y=value)) + geom_bar(stat="identity") + xlab("") + ylab("")

В результате получается следующий столбчатый график:

введите здесь описание изображения

person Andrie    schedule 12.02.2011
comment
спасибо за предложение, но я хотел соединить точки данных линией. Проблема с использованием гистограмм для визуализации данных за несколько моментов времени заключается в том, что это может привести к чрезмерному количеству угольных чернил (Verzani, 2005, стр. 35). - person ATMathew; 13.02.2011
comment
предполагается, что он считывает чрезмерное количество чернил... в любом случае проблема решена. - person ATMathew; 13.02.2011