2011-08-11 9 views
5

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

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. –

+2

'plot.zoo' funziona con oggetti xts e ti dà un controllo molto più fine. '? plot.zoo' ha tonnellate di esempi. –

risposta

3

plot.xts è una funzione plot di base, il che significa che è possibile utilizzare points.default() e lines.default() se è stato utilizzato gli stessi argomenti x come plot.xts utilizza. Ma non è necessario. È già stato disattivato nei pacchetti xts e zoo perché quando questi pacchetti sono caricati, e si esegue methods(lines) e metodi (punti) si vedono tali funzioni sono già disponibili. points.zoo è documentato sulla pagina? Plot.zoo.

+0

lines.default, mentre è stato eseguito, non ha fatto nulla per la trama. Ho usato la trama (petroxts) per tracciare le prime timeeries in quell'oggetto xts, e dopo il par (new = T) quando eseguo lines.default (petro $ date, petroxts $ hpcl, col = "green"), il prompt è restituito senza alcun messaggio e nulla accade sulla trama. Quindi, come posso usare lines.default? – Soumendra

+0

Probabilmente stai vivendo il fatto che i fattori e gli orari sono rappresentati in modi che potrebbero non essere evidenti all'utente. Accade spesso che le funzioni di tracciamento implichino un comando as.numeric() e il tracciamento non si verifichi perché i punti si trovano al di fuori dell'area di stampa. Una risposta più specifica non è possibile data la mancanza di dettagli riguardo l'oggetto "set di dati" nella tua domanda. Se si tratta di un oggetto zoo/xts, le "date" potrebbero essere nel componente indice dell'oggetto. –