2012-01-11 13 views
8

Estoy tratando de trazar 6 días de datos intradía como 6 gráficos. La función chart_Series() experimental de Quantmod funciona con la configuración par(). He pre-cargado los datos en bars (un vector de objetos XTS) por lo que mi código es el siguiente:R/quantmod: múltiples gráficos, todos utilizando el mismo eje y

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

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

Esto funciona, pero cada uno tiene su propia tabla de diferente escala del eje y. Quería establecer un rango y que cubra los 6 días, pero no puedo encontrar la forma de hacerlo. Intenté esto:

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

pero falla con el error de "argumento no utilizado (s)". yrange = ylim también falla.

Puedo usar chartSeries (d, yrange = ylim), y funciona. Pero hasta donde sé, no puedo poner múltiples gráficos en una pantalla (?). (Puede ser que sea estrictamente fuera de tema, pero las sugerencias para R paquetes alternativos que pueden dibujar gráficos de aspecto agradable de velas, permiten el control del eje Y y puedan extraer varios gráficos en una imagen también sería muy bienvenido.)

Respuesta

8

Con chartSeries, puede establecer el argumento layout en NULL para evitar que se llame al comando layout(): esto es lo que desactiva la configuración 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) 

Si desea mantener el volumen, puede llamar layout en lugar de establecer mfrow: lo hace básicamente lo mismo, pero le permite tener parcelas de diferentes tamaños y elegir el orden en el que se trazan.

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) 
) 
} 
+0

Gracias Vicente, que funciona! ¿Alguna sugerencia/enlace/artículo sobre cómo usar el diseño para volver a subir el subgrupo de volúmenes? –

+1

He agregado un ejemplo con 'layout' (antes de ver tu respuesta ...) –

1

Google para entender la respuesta de Vincent me llevó al comando layout(). Parece incompatible con par (mfrow), pero algunos experimentos más encontraron que se puede usar como alternativa.

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) 
    } 

(Se dará cuenta añadí bandas de Bollinger también, para estar seguro de superposiciones siguen trabajando también.)

Cuestiones relacionadas