Добавление точек, легенд и текста на графики с использованием объектов XTS - PullRequest
6 голосов
/ 11 августа 2011

Я начинаю немного анализировать пары акций (торговля парами), и вот функция, которую я написал для создания графика (пар. Отчет - приведен ниже).

Мне нужно построить триразные линии в одном сюжете.Функция, которую я перечислил, делает то, что я хочу, но это займет немного работы, если я хочу точную настройку по оси X (временная шкала).Как таковой, он печатает только годы (для данных за 10 лет) или месяцы (для данных за 6 месяцев) по оси x, без форматирования для тиков.

Если я использую объект xtsТо есть, если я использую

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

вместо

plot(date, asset2, ...)

, я сразу получаю хорошо отформатированную ось X (вместе с сеткой и прямоугольником), но последующие добавления кпостроение графика с использованием таких функций, как points (), text (), lines (), не выполняется.Я полагаю, что points.xts () и text.xts () не появятся в ближайшее время.

Мне бы хотелось удобство объектов xts, но мне также потребуется детальный контроль над моим графиком.Так каким должен быть мой рабочий процесс?Нужно ли придерживаться базовой графики и выполнять все настройки вручную?Или я могу заставить xts работать на меня?

Я знаю о решетке и ggplot2, но сейчас я не хочу их использовать.Вот функция, которую я упомянул (любая критика / предложения по улучшению кода приветствуются) -

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

1 Ответ

4 голосов
/ 11 августа 2011

plot.xts - это базовая функция графика, что означает, что вы можете использовать points.default() и lines.default(), если вы использовали те же аргументы x, что и plot.xts. Но это не обязательно. Он уже хэшируется в пакетах xts и zoo, потому что когда эти пакеты загружены, и вы выполняете methods(lines) и методы (точки), вы видите, что такие функции уже доступны. points.zoo описано на странице? Plot.zoo.

...