2014-11-07 3 views
0

Я пытаюсь построить временную версию матрицы mx. Я использовал следующий код, однако ось x не показывает даты, которые у меня есть. Вместо этого он отображает некоторые цифры и на самом деле не отслеживает проблему.Построение временных рядов объекта

mx_ts<-ts(mx) 
plot(mx_ts, type="l") 

воспроизводимый пример mx выглядит следующим образом:

structure(c("0.233632449583826", "0.252105485477729", "0.591295809149662", 
"0.0901324567177099", "-0.0423290120373304", "0.0363874105632916", 
"-0.136952003053153", "0.451355935617868", "-0.291897852322839", 
"0.287789031880016", "-2.1", "-1.4", "-2.6", "1.9", "-0.7", "1.4", 
"-0.6", "-1.3", "-1.4", "0"), .Dim = c(10L, 2L), .Dimnames = list(
    c("1985-01", "1985-02", "1985-03", "1985-04", "1985-05", 
    "1985-06", "1985-07", "1985-08", "1985-09", "1985-10"), c("return", 
    "ukcc"))) 
+0

Обратите внимание, что 'df' является матрицей, а не фреймом данных, как может показаться имя. Также он содержит строки символов, а не числа. Возможно, проблема в том, как она была построена в первую очередь. –

+0

@ G.Grothendieck Я изменил все 'df' на' mx' (также в ответах), чтобы не путать. Символьная строка представляет собой столбец «date», и это создает проблему в каждом последующем анализе. Пытался изменить его на 'as.Date', но не работал. – athraa

ответ

2

Вот несколько других вариантов:

library(zoo) 
library(xts) 

# Convert to time series object with dates by month 
mx.ts = ts(mx, start=as.yearmon(rownames(mx)[1]), frequency=12) 

# Plot with fractional years on x-axis 
plot(mx.ts) 

enter image description here

# Plot with month-year on x-axis 
par(mfrow=c(2,1)) 
plot(as.xts(mx.ts[,"return"]), major.format="%b-%Y", cex.axis=0.7, main="Return") 
plot(as.xts(mx.ts[,"ukcc"]), major.format="%b-%Y", cex.axis=0.7, main="ukcc") 

enter image description here

И всегда есть ggplot2 пакет:

library(reshape2) 
library(ggplot2) 

mx2 = cbind(Date=rownames(mx), mx) 
names(mx2)=c("Date","Return","ukcc") 

# Melt data into "long" format 
mx2.m = melt(mx2, id.var="Date") 

ggplot(mx2.m, aes(Date, value, group=variable, colour=variable)) + 
    geom_line() + geom_point() + 
    facet_grid(variable ~ ., scales="free_y") 

enter image description here

+0

Достаточно подробный ответ. Одна вещь; При запуске последней строки ответа 'ggplot' я получил следующую ошибку. Ошибка в 'layout_base (data, rows, drop = drop): По крайней мере, один слой должен содержать все переменные, используемые для facetting' – athraa

+0

Это означает, что вы использовали имя переменной в' facet_grid', которое не найдено в кадре данных вашего графика. Если вы распечатаете 'df2.m' в своей консоли, вы увидите, что плавление' df2' создало новый столбец с именем 'variable', который содержит значения' Return' и 'ukcc'. Вам нужна такая колонка в ваших собственных данных для фасетирования.'melt' называет его' переменной' по умолчанию, но вы можете установить его в нужное вам положение. – eipi10

+0

Я просто использую тот же пример выше, поэтому ничего не изменилось. – athraa

2

zoo класс может быть предпочтительным в этом случае:

library(zoo) 
## 
Dates <- as.Date(paste0(row.names(mx),"-01")) 
mx_zoo <- zoo(apply(mx,2,as.numeric),Dates) 
## 
> plot(mx_zoo) 

enter image description here

Edit: Вот быстрый способ получить год информацию о оси х, используя @ предложение Хенрика:

mx_zoo2 <- zoo(apply(mx,2,as.numeric), 
       as.yearmon(Dates)) 
> plot(mx_zoo2) 

enter image description here

Вы можете настроить метки осей, если вы поиграйте с axis немного, но быть честный, я думаю, что ответ @ eipi10 охватывает это очень хорошо, поэтому я бы рекомендовал вместо этого использовать его подход.

+0

Это хорошо работает. Могу ли я узнать, что означает '' -01 "? также, как я могу получить годы на оси х вместо месяцев? – athraa

+0

Вы также можете использовать 'order.by = as.yearmon (rownames (df))' – Henrik

+2

«-01» добавляет день месяца к каждой дате, чтобы 'as.Date' работал правильно. – eipi10