R / quantmod: несколько графиков, использующих одну и ту же ось Y - PullRequest
8 голосов
/ 11 января 2012

Я пытаюсь построить 6-дневные внутридневные данные в виде 6 графиков.Экспериментальная функция Quantmod chart_Series () работает с настройками par ().Я предварительно загрузил данные в bars (вектор объектов XTS), поэтому мой код выглядит следующим образом:

par(mfrow=c(3,2))   #3 rows, 2 columns

for(d in bars){
    print(chart_Series(d, type = "candlesticks") )
    }

Это работает, но у каждой диаграммы свой собственный масштаб по оси Y.Я хотел установить диапазон y, охватывающий все 6 дней, но не могу найти способ сделать это.Я попытался это:

ylim=c(18000,20000)
print(chart_Series(d, type = "candlesticks",ylim=ylim) )

, но это не удалось с ошибкой «неиспользованный аргумент (ы)».yrange = ylim также не работает.

Я могу использовать chartSeries (d, yrange = ylim), и это работает.Но, насколько я знаю, я не могу разместить несколько графиков на одном дисплее (?).(Это может быть совершенно не по теме, но предложения по альтернативным R-пакетам, которые могут рисовать симпатичные диаграммы подсвечников, позволяют управлять осью Y и могут рисовать несколько диаграмм на одном изображении, также приветствуются.)

Ответы [ 2 ]

8 голосов
/ 11 января 2012

С помощью chartSeries вы можете установить аргумент layout на NULL, чтобы запретить вызов команды layout(): это отключает настройку mfrow.

library(quantmod)
getSymbols("AA")

op <- par(mfrow=c(3,2))
for(i in 1:6) {
  chartSeries(
    AA["2011-01"], "candlesticks", 
    TA=NULL, # No volume plot
    layout=NULL, 
    yrange=c(15,18)
  )
}
par(op)

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

layout( matrix( c(
    1, 3,
    2, 4,
    5, 7,
    6, 8,
    9, 11,
   10, 12
  ), nc=2, byrow=TRUE),
  heights = rep( c(2,1), 3 )
)
#layout.show(12) # To check that the order is as desired
for(i in 1:6) {
  chartSeries( 
    AA[sprintf("2011-%02d",i)], 
    "candlesticks", layout=NULL, yrange=c(15,19) 
  )
}
1 голос
/ 12 января 2012

Погугление, чтобы понять ответ Винсента, привело меня к команде layout ().Кажется, он несовместим с параметром par (mfrow), но еще несколько экспериментов показали, что его можно использовать в качестве альтернативы .

ylim=c(18000,20000)
layout(matrix(1:12,nrow=6,ncol=2), height=c(4,2,4,2,4,2))
for(d in bars){
    chartSeries(d,layout=NULL,TA=c(addVo(),addBBands()),yrange=ylim)
    }

(Вы заметите, что я также добавил полосы Боллинджера, чтобынаверняка оверлеи тоже работают.)

...