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))
}
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. –
'plot.zoo' funciona con objetos xts y le proporciona un control mucho más preciso. '? plot.zoo' tiene toneladas de ejemplos. –