Sto iniziando un po 'di analisi su coppie di azioni (scambio di coppie) ed ecco la funzione che ho scritto per produrre un grafico (pairs.report - elencato di seguito).Aggiunta di punti, legende e testo ai grafici usando oggetti xts
Ho bisogno di tracciare tre linee diverse in un singolo grafico. La funzione che ho elencato fa quello che voglio che faccia, ma ci vorrà un po 'di lavoro se voglio una buona personalizzazione nell'asse x (la linea del tempo). Così com'è, stampa solo gli anni (per 10 anni di dati) oi mesi (per 6 mesi di dati) sull'asse x, senza formattazione per le zecche.
Se uso un oggetto xt, cioè, se uso
plot(xts-object-with-date-asset1-asset2, ...)
anziché
plot(date, asset2, ...)
ottengo un asse x ben formattata subito (insieme con la griglia e la scatola), ma le successive aggiunte alla trama usando funzioni come punti(), text(), lines() falliscono. Suppongo che points.xts() e text.xts() non escano presto.
Vorrei la comodità degli oggetti xts, ma richiederò anche un controllo a grana fine sulla mia trama. Quindi, come dovrebbe essere il mio flusso di lavoro? Devo attenermi alla grafica di base e fare tutte le personalizzazioni manualmente? O c'è un modo per far funzionare le xts per me?
Sono a conoscenza di lattice e ggplot2, ma non voglio usarli ora. Ecco la funzione che ho citato (ogni critica/suggerimenti per il miglioramento del codice è benvenuto) -
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))
}
forse la mia risposta alla mia stessa domanda in questo thread ti aiuta anche: http://stackoverflow.com/questions/7009711/how-to-get-years-from-a-time-series-index-when -the-underlying-time-series-is-of-m almeno si dovrebbe ottenere altri tempi rispetto a soli 10 anni span. Ovviamente lo stesso funziona anche con le zecche. –
'plot.zoo' funziona con oggetti xts e ti dà un controllo molto più fine. '? plot.zoo' ha tonnellate di esempi. –