Как реализовать функцию сетки фасетов с помощью библиотеки ggfortify для данных временных рядов?

Я использую RStudio, и у меня есть данные time series (объект ts) с именем data1.

Вот как выглядит data1:

     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2014 135 172 179 189 212  47 301 183 247 292 280 325
2015 471 243 386 235 388 257 344 526 363 261 189 173
2016 272 267 197 217 393 299 343 341 315 305 384 497

Чтобы построить вышеизложенное, я запустил этот код:

plot (data1)

и я получаю следующий сюжет:

рисунок 1

Я хочу иметь график, разбитый по годам, и я думал о реализации функции facet_grid, найденной в ggplot2, но, поскольку мои данные являются объектом ts, я не могу использовать ggplot2 непосредственно на нем.

После некоторых исследований я обнаружил, что библиотека ggfortify работает с ts объектами. Однако мне трудно понять, как использовать с ним функцию facet_grid.

Моя цель - построить что-то вроде ниже из моих данных ts:

рисунок 2

«Женщина» и «Мужчина» будут заменены годами 2014, 2015 и 2016. По оси X будут отображаться месяцы (январь, февраль, март и т. д.), а по оси Y — значения в ts файл . Я бы предпочел линейный график, а не точечный.

Я на правильном пути или есть другой способ решить эту проблему?


person user3115933    schedule 02.01.2018    source источник
comment
В SO есть много примеров того, как reshape ваши данные и графические грани с ggplot2. PS: В вашем случае я бы использовал geom_line(aes(color = factor(year))) вместо фасетов.   -  person pogibas    schedule 02.01.2018
comment
Я знаю, что могу изменить свои данные и использовать ggplot2. Я хочу сказать, могу ли я сделать это без изменения данных и использования ggfortify.   -  person user3115933    schedule 02.01.2018
comment
Тот, кто поставил минус, не понял цели моего вопроса. Я думаю, что из названия вопроса ясно, что я ищу решение, как заставить это работать с файлом ts. Речь не идет об изменении данных.   -  person user3115933    schedule 02.01.2018
comment
Посмотрите на ?ggplot2::autoplot. Вы можете попробовать library(lubridate); autoplot(data1) + facet_grid(. ~ year(Index), scales = "free_x")   -  person markus    schedule 02.01.2018
comment
@markus Спасибо. Именно то, что я искал! Пожалуйста, напишите как ответ, и я отдам свой голос.   -  person user3115933    schedule 02.01.2018


Ответы (1)


Мы можем использовать ggplot2::autoplot. Я буду использовать данные AirPassengers в качестве примера.

library(ggplot2)
library(lubridate)
autoplot(AirPassengers) + 
 facet_grid(. ~ year(Index), scales = "free_x") + 
 scale_x_date(date_labels = "%b")

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

person markus    schedule 02.01.2018