2011-08-11 10 views
5

Estoy empezando con un poco de análisis sobre pares de acciones (pares de negociación) y aquí está la función que escribí para producir un gráfico (pairs.report - listado a continuación).Agregando puntos, leyendas y texto a parcelas usando objetos xts

necesito para trazar tres líneas diferentes en una sola trama. La función que he enumerado hace lo que yo quiero que haga, pero tomará un poco de trabajo si quiero una personalización fina en el eje x (la línea de tiempo). Tal como está, imprime solo los años (para 10 años de datos) o los meses (para 6 meses de datos) en el eje x, sin formato para los tics.

Si utilizo un objeto xts, es decir, si uso

plot(xts-object-with-date-asset1-asset2, ...) 

en lugar de

plot(date, asset2, ...) 

consigo un eje x con un formato agradable de inmediato (junto con la rejilla y la caja), pero las adiciones posteriores a la trama usando funciones como puntos(), texto(), líneas() fallan. Supongo que points.xts() y text.xts() no saldrán en el corto plazo.

Me gustaría la conveniencia de los objetos xts, pero también requeriré un control detallado sobre mi trama. Entonces, ¿cómo debería ser mi flujo de trabajo? ¿Debo apegarme a los gráficos básicos y hacer toda la personalización manualmente? ¿O hay alguna manera de que pueda hacer que los xts funcionen para mí?

Soy consciente de celosía y ggplot2, pero no quieren usarlos ahora. Esta es la función que he mencionado (cualquier crítica/sugerencias para la mejora del código es bienvenida) -

library(xts) 

pairs.report <- function(asset1, asset2, dataset) { 

#create data structures 
attach(dataset) 
datasetlm <- lm(formula = asset1 ~ asset2 + 0, data = dataset) 
beta = coef(datasetlm)[1] 

#add extra space to right margin of plot within frame 
par(mar=c(5, 4, 4, 4) + 0.1) 

# Plot first set of data and draw its axis 
ylim <- c(min(asset2,asset1), max(asset2,asset1)) 
plot(date, 
    asset2, 
    axes=T, 
    ylim=ylim, 
    xlab="Timeline", 
    ylab="asset2 and asset1 equity", 
    type="l", 
    col="red", 
    main="Comparison between asset2 and asset1") 
lines(date, asset1, col="green") 
box() 
grid(lwd=3) 

# Allow a second plot on the same graph 
par(new=T) 

# Plot the second plot and 
ylim <- c(min(asset1-beta*asset2), max(asset1-beta*asset2)) 
plot(date, 
    asset1-beta*asset2, 
    xlab="", ylab="", 
    ylim=ylim, 
    axes=F, 
    type="l", 
    col="blue") 

#put axis scale on right 
axis(side=4, 
    ylim=ylim, 
    col="blue", 
    col.axis="blue") 
mtext("Residual Spread",side=4,col="blue",line=2.5) 

abline(h=mean(asset1-beta*asset2)) 
} 
+0

tal vez mi respuesta a mi propia pregunta en este hilo también te ayude: http://stackoverflow.com/questions/7009711/how-to-get-years-from-a-time-series-index-when -the-subyace en tiempo-serie-es-de-m al menos usted debe conseguir otros lapsos que sólo el 10 palmos año. Por supuesto, lo mismo funciona con garrapatas también. –

+2

'plot.zoo' funciona con objetos xts y le proporciona un control mucho más preciso. '? plot.zoo' tiene toneladas de ejemplos. –

Respuesta

3

plot.xts es una función trama de base, lo que significa que puede utilizar points.default() y lines.default() si utilizó los mismos x argumentos plot.xts usos. Pero eso no es necesario. Ya está corregido en los paquetes xts y zoo porque cuando esos paquetes están cargados, y ejecutas methods(lines) y métodos (puntos) ves que tales funciones ya están disponibles. points.zoo está documentado en la página? Plot.zoo.

+0

lines.default, mientras se ejecutaba, no le hizo nada a la trama. Solía ​​trama (petroxts) primero en trazar las primeras series de tiempo en el que el XTS objeto, y después de la par (nuevo = T) cuando ejecuto lines.default (petro $ fecha, petroxts $ HPCL, col = "verde"), es el símbolo regresó sin ningún mensaje y no sucede nada en la trama. Entonces, ¿cómo uso lines.default? – Soumendra

+0

Probablemente esté experimentando el hecho de que los factores y fechas de tiempo están representados de maneras que pueden no ser evidentes para el usuario. A menudo ocurre que las funciones de trazado harán una función implícita como .numeric() y el trazado parece no ocurrir porque los puntos están fuera de la región de trazado. La respuesta más específica no es posible debido a la falta de detalles con respecto al objeto "conjunto de datos" en su pregunta. Si se trata de un objeto zoo/xts, las "fechas" pueden estar en el componente de índice del objeto. –