Я начинаю небольшой анализ пар акций (парная торговля), и вот функция, которую я написал для построения графика (pair.report - перечислена ниже)
Мне нужно построить три разные линии на одном сюжете. Функция, которую я перечислил, выполняет то, что я хочу, но потребуется немного поработать, если я хочу тонкую настройку по оси x (временной шкале). Как бы то ни было, он печатает только годы (для данных за 10 лет) или месяцы (для данных за 6 месяцев) по оси x без форматирования для отметок.
Если я использую объект xts, т. Е. если я использую
plot(xts-object-with-date-asset1-asset2, ...)
вместо
plot(date, asset2, ...)
, я сразу же получаю хорошо отформатированную ось x (вместе с сеткой и рамкой), но последующие добавления к графику с использованием таких функций, как точки (), текст (), линии ( ) не работает. Я полагаю, что точки .xts () и text.xts () не появятся в ближайшее время.
Мне бы хотелось удобства xts-объектов, но мне также потребуется детальный контроль над моим сюжетом. Итак, каким должен быть мой рабочий процесс? Должен ли я придерживаться базовой графики и выполнять все настройки вручную? Или есть способ заставить xts работать на меня?
Я знаю о lattice и 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))
}