2011-08-11 18 views
5

Zaczynam od analizy par par (handlu parami) i tutaj jest funkcja, którą napisałem do tworzenia wykresu (pairs.report - lista poniżej).Dodawanie punktów, legend i tekstu do drukowania za pomocą obiektów xts

Potrzebuję wykreślić trzy różne linie na jednym wykresie. Funkcja, którą mam na liście, wykonuje to, co chcę, ale zajmie to trochę pracy, jeśli chcę precyzyjnie dostosować na osi x (linię czasu). W rzeczywistości drukowane są tylko lata (dla 10 lat danych) lub miesiące (dla 6 miesięcy danych) na osi X, bez formatowania dla kleszczy.

Gdybym użyć obiektu XTS, to znaczy, jeśli mogę użyć

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

zamiast

plot(date, asset2, ...) 

dostaję ładnie sformatowany oś x razu (wraz z siatki i skrzynki), ale kolejne uzupełnienia wykresu za pomocą funkcji takich jak points(), text(), lines() zawodzą. Przypuszczam, że points.xts() i text.xts() nie pojawią się w najbliższym czasie.

Chciałbym wygodę obiektów Xts, ale będę również wymagał drobnej kontroli nad moją fabułą. Jak powinien wyglądać mój work-flow? Czy muszę trzymać się podstawowej grafiki i ręcznie dostosowywać wszystkie ustawienia? Czy istnieje sposób, w jaki mogę zrobić dla mnie XTS?

Jestem świadomy kraty i ggplot2, ale nie chcę ich teraz używać. Oto funkcja wspominałem (wszelka krytyka/sugestie dotyczące poprawy kod jest mile widziane) -

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

Może moja odpowiedź na moje własne pytanie w tym wątku pomaga również: http://stackoverflow.com/questions/7009711/how-to-get-years-from-a-time-series-index-when - przynależność do serii czasu-jest-of-m przynajmniej powinieneś dostać inne okresy czasu niż tylko 10-letnie okresy. Oczywiście to samo działa z kleszczami. –

+2

'dział.zoo' działa z obiektami xts i daje ci dużo lepszą kontrolę. '? plot.zoo' ma mnóstwo przykładów. –

Odpowiedz

3

plot.xts jest funkcją baza fabuła, która oznacza, że ​​można użyć points.default() i lines.default() jeśli użyto tych samych x argumenty używa plot.xts. Ale to nie jest konieczne. Jest już zaimplementowany w pakietach xts i zoo, ponieważ po załadowaniu tych pakietów i wykonaniu methods(lines) i metod (punktów) widać, że takie funkcje są już dostępne. points.zoo jest udokumentowany na stronie? Plot.zoo.

+0

linie.default, podczas gdy został wykonany, nie zrobił nic na działce. Najpierw użyłem działki (petrów), aby narysować pierwszy szereg czasowy w tym obiekcie xts, a po par (nowy = T), kiedy wykonuję linie.default (petro $ date, petrox $ hpcl, col = "green"), monit jest powrócił bez żadnych wiadomości i nic się nie dzieje na działce. Więc jak korzystać z lines.default? – Soumendra

+0

Prawdopodobnie doświadczasz tego, że czynniki i terminy są reprezentowane w sposób, który może nie być widoczny dla użytkownika. Często się zdarza, że ​​funkcje kreślące wykonają niejawne as.numeric(), a wykreślanie nie występuje, ponieważ punkty znajdują się poza obszarem fabuły. Bardziej szczegółowa odpowiedź nie jest możliwa z uwagi na brak szczegółowych informacji na temat obiektu "dataset" w pytaniu. Jeśli jest to obiekt zoo/xts, wówczas "daty" mogą znajdować się w składowej indeksu obiektu. –

Powiązane problemy