не может показывать abline на графиках в цикле

У меня есть xts с 5 столбцами ценовых данных. Я хочу построить каждый столбец данных в виде линейного графика и добавить горизонтальную линию, уникальную для каждого столбца. Мой код:

pColours <- sequential_hcl(5, palette = "Viridis")

target = c(1,3,5,7,9)

for (i in 1:5) {

  mydata <- xts[ ,i]

  plot(mydata, col = pColours[i], main = "blah blah", ylim = (0,8), 
       major.ticks = "auto", minor.ticks = NULL))

  abline(h = target[i], col = "red")
}

Я получаю сообщение об ошибке в int_abline.. plot.new еще не вызывался. Я понимаю, что сюжет построен слоями, и я пробовал так много способов получить аблайн на каждом графике. Я просто не могу заставить аблайн строить линейный график. Помощь!


person Dee Dee    schedule 10.06.2020    source источник
comment
Что такое xts? Похоже, это объект особого класса (возможно, это не базовая графика). (Возможно, будет лучше включить образец ваших данных, чтобы мы могли попытаться воспроизвести вашу ошибку.)   -  person r2evans    schedule 11.06.2020
comment
Я не могу воспроизвести вашу ошибку. После исправления некоторых незначительных проблем и удаления major.ticks и minor.ticks я получил сюжет.   -  person Martin Gal    schedule 11.06.2020
comment
xts — это объект временного ряда в R. В моем случае он содержит скользящие стандартные отклонения для 5 акций.   -  person Dee Dee    schedule 11.06.2020


Ответы (1)


Аблайн должен быть напечатан на каждом графике правильно:

  • ylim должен быть вектором c(0,8)... отсутствует c,
  • удалить major.ticks и minor.ticks,
  • правильные пары скобок в вашем коде.

Этот простой пример (на основе вашего) работает правильно:

target = c(1,3,5,7)
for (i in 1:4) {
    mydata <- target
    plot(mydata, main = "blah blah", ylim = c(0,8))
    abline(h = target[i], col = "red")
}

Хотя это немного странный пример, он работает и создает ряд графиков с помощью abline.

первый пример

Если вам нужно больше строк на одном графике, вы можете просто переместить цикл:

target = c(1,3,5,7)
mydata <- target
plot(mydata, main = "blah blah", ylim = c(0,8))
for (i in 1:4) {
    abline(h = target[i], col = "red")
}

второй пример

person Community    schedule 10.06.2020
comment
Спасибо. Я решил проблему, добавив цели к объекту xts (xts$target1 ‹- 1.2), а затем использовал линии (xts[, target1], col = red') для построения линии. Abline() — странный зверь! - person Dee Dee; 11.06.2020