2013-06-17 2 views
1

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

Простой сюжет команды

set.seed(1) 

x <- as.ts(rnorm(1:150)) 

plot <- plot(x, xaxt = "n", yaxt = "n") 

Преобразовать набор команд из этого answer в функцию

tt = seq(as.Date("1994-03-01"), by="months", length=150) 

tsAxis <- function (tt) { 

    ix <- seq_along(tt) # number of ticks 

    fmt <- "%b-%y" # format of time 

    labs <- format(tt, fmt) # names or labels of dates 

    axis(1, at = tt[ix], labels = labs[ix], 
     tcl = -0.7, cex.axis = 0.7, las = 2) 
} 

Тогда tsAxis (tt) должен нарисовать ось, но это не так, и нет ошибки. Даже написание команд отдельно не создает график.

Любые решения?

+0

В вашей функции 'axis' попробуйте изменить параметр' at = tt [ix] 'на' at = ix'. Кажется, что R не имеет оси x в качестве формы даты, а как целые числа. – ialm

+0

Спасибо. Теперь ось нарисована, но возникает другой вопрос. Если мы хотим только одну треть меток, 'ix <- seq (1, length (tt), 3)', то количество тиков и меток не совпадает. Как указать расположение тиков в этом случае? – Anusha

+0

Вы пытались изменить строку 'ix <- seq_along (tt)' на 'ix <- seq (1, length (tt), 3)' и снова запустить код? Кажется, работает для меня. У меня есть 'axis (1, at = ix, labels = labs [ix], tcl = -0.7, cex.axis = 0.7, las = 2)' в функции 'tsAxis', которая, похоже, работает. – ialm

ответ

1

Кажется, что R представляет собой ось x с целыми числами в этом случае (т. Е. X = 1 является первым событием, x = 2 является вторым событием и т. Д.). Вы можете увидеть это, если вы запустите код:

set.seed(1) 
x <- as.ts(rnorm(1:150)) 
# Take a look at the x-axis 
plot <- plot(x) 

Мы можем изменить код, чтобы отразить это:

tt = seq(as.Date("1994-03-01"), by="months", length=150) 
tsAxis <- function (tt) { 
    ix <- seq_along(tt) # number of ticks 
    fmt <- "%b-%y" # format of time 
    labs <- format(tt, fmt) # names or labels of dates 
    # Change "at=tt[ix]" to "at=ix" here! 
    axis(1, at = ix, labels = labs[ix], 
     tcl = -0.7, cex.axis = 0.7, las = 2) 
} 

Или, если вы хотите построить каждый третий галочку, просто измените ix <- seq_along(tt) на ix <- seq(1, length(tt), 3) и он должен работать.

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