2016-04-14 2 views
0

У меня есть вопрос о согласовании R: Я пытался создать набор данных о ежедневных временных рядах товара в R с пакетом ggplot2 и ggfortify в матрицу. Я пытаюсь иметь стандартизированные значения на каждой оси y и даты 1/1/2007, 1/1/2008 ... на оси x. Визуальная концепция должна выглядеть следующим образом:Графическая матрица временных рядов

enter image description here

Кто-нибудь знает, как это работает?

+1

Добро пожаловать в SO! Вам нужно сделать [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610#5963610) с адекватными образцами данных для воспроизведения ситуации , – alistaire

+0

Проверьте 'autoplot.zoo' в пакете' zoo' для некоторых примеров. (Также имеется код репликации для JSS-бумаги, которую вы упоминаете, вместе с наномписью.) –

ответ

2

Пакет zoo обеспечивает поддержку временных рядов с гибкими временными индексами, например Date. Пакет также предлагает метод fortify(), который можно использовать для графики ggplot2. Также предлагается метод удобства для autoplot(), см. ?autoplot.zoo для выбора обработанных примеров с различными макетами.

Для примера с 18 временными рядами с Date указателем в макете 3 х 6, я использую подмножество набора данных FXRatesCHF из пакета fxregime. Это дает обменные курсы для разных валют в отношении швейцарского франка (CHF).

library("zoo") 
data("FXRatesCHF", package = "fxregime") 
FX <- window(FXRatesCHF[, c(1:4, 6:19)], start = as.Date("2000-01-01")) 

Затем ggplot() может быть применен к выходу методы fortify():

library("ggplot2") 
ggplot(aes(x = Index, y = Value), data = fortify(FX, melt = TRUE)) + 
    geom_line(color = "darkred") + 
    xlab("Time") + ylab("FX") + 
    theme_bw() + 
    facet_wrap(~ Series, scales = "free_y", ncol = 6) 

FX ggplot2

Того же самый вид компоновки также может быть легко создан с базовой графикой. Только названия панели находятся на оси у, а не в главном заголовке серо-затененных:

plot(FX, col = "darkred", xlab = "Time", nc = 6, 
    panel = function(...) { grid(col = "lightgray"); lines(...) }) 

FX base graphics

Наконец, версия lattice может быть создан

library("lattice") 
trellis.par.set(theme = standard.theme(color = FALSE)) 
xyplot(FX, col = "darkred", xlab = "Time", layout = c(6, 3), 
    panel = function(...) { panel.grid(col = "lightgray"); panel.lines(...) }) 

FX lattice

+0

Я пробовал следующее решение: dit работал очень хорошо: '# Стандартизировать данные data_std <- data для (i в 2:26) {data_std [, i] - значение (data_std [, i]))/sd (data_std [, i])} # Создайте переменную, содержащую дату в представлении, R может иметь дело с: дата <- as.Date (данные времени $, формат = "% м /% d /% Y") data_std $ времени <- дата # Создать новый dataframe "datalili" newdata_wheat < - data_std [, 1: 2] имена (newdata_wheat) [2] <- paste ("цена") newdata_wheat ["товар"] <- "пшеница" datalili <- newdata_wheat ' –

+0

Я бы порекомендовал использовать подходящий объект временных рядов (например, 'zoo', как в моем примере), потому что для этого есть специальные возможности построения графиков.И цикл 'for()' для масштабирования данных также излишне неуклюже. Если вы хотите масштабировать данные в моем примере, просто добавьте 'FX <- scale (FX)' перед построением графика. –