8.4 Plot TS
8.4.1 plot.xts
The default plot style in plot.xts()
is a single-panel plot with multiple series. You can also create multi-panel plots by setting the optional argument multi.panel = TRUE
in the call to plot.xts()
.
Add legend to multiple series using addLegend
plot_data <- reg_data %>%
select(eRi, rmrf) %>%
xts(order.by = the_group$Date)
plot_data
col_vec <- c("black", "red") # color series
plot.xts(plot_data, col = col_vec, main = "Excess Return on Asset and Market")
addLegend("topright",
legend.names = c("eRi", "rmrf"),
lty = c(1, 1),
lwd = c(2, 2),
col = col_vec,
bg = "white", # legend background
bty = "o", # box border style, doesn't work
box.col = "white" # box border color
)
Another example
plot(x = basket[,"SPY.Close"], xlab = "Time", ylab = "Cumulative Return",
main = "Cumulative Returns", ylim = c(0.0, 2.5), major.ticks= "years",
minor.ticks = FALSE, col = "red")
lines(x = basket[,"QQQ.Close"], col = "darkgreen")
lines(x = basket[,"GDX.Close"], col = "goldenrod")
lines(x = basket[,"DBO.Close"], col = "darkblue")
lines(x = basket[,"VWO.Close"], col = "darkviolet")
legend(x = 'topleft', legend = c("SPY", "QQQ", "GDX", "DBO", "VWO"),
lty = 1, col = myColors)
main.timespan = FALSE
to remove the time span label in the top right corner.
plot.xts
overrides figure margins set by par
. If you want to change figure margins, set it inside plot.xts
function.
plot.xts
set mar = c(3, 2, 0, 2)
by default.
8.4.2 autoplot
For plotting xts
objects, especially with multiple columns (data series), the ggplot2 function autoplot()
is especially convenient and easy:
library(ggplot2)
# all series in one panel
autoplot(msftSbuxDailyPrices, facets = NULL) +
ggtitle("Daily Closing Prices") +
ylab("Closing Price Per Share") +
xlab("Year")
or produce a multi-panel plot call autoplot()
with facets = Series ~ .
:
# one panel for each series
autoplot(msftSbuxDailyPrices, facets = Series ~ .) +
ggtitle("Daily Closing Prices") +
ylab("Closing Price Per Share") +
xlab("Year")
More refined setting
Set colors
# using autoplot from earlier, I placed it into an object
p <- autoplot(prcomp(df), data = iris, colour = 'Species', shape='Species', frame=T)
# then I added on scale_color_manual and scale_fill_manual with the wacky color combos that would never be publishable
a + scale_fill_manual(values = c("#FF1BB3","#A7FF5B","#99554D")) + scale_color_manual(values = c("black","white","orange"))
Set date breaks
# auto date breaks every 6 mons
autoplot(plot_data, facets = NULL) +
scale_color_manual(values = c("black", "red")) +
scale_x_date(date_breaks = "6 month",
date_labels = "%b %y",
limits=c(ymd("2014-12-30"), ymd("2021-12-30") )
)
# explicit date breaks
autoplot(plot_data, facets = NULL) +
scale_color_manual(values = c("black", "red")) +
scale_x_date(breaks = seq(from=index(plot_data)[1] %m-% months(1),
to=tail(index(plot_data), 1),
by="6 month"),
date_labels = "%b %y",
limits=c(ymd("2014-12-30"), ymd("2021-12-30") )
)
Simulate a autocorrelated time series.
arima.sim(model, n, sd=1)
model
a list with the following elements. The coefficients must be provided through the elementsar
andma
.order
a vector of length 3 containing theARIMA(p, d, q)
orderp
specifies AR order;d
is the differencing order;q
specifies MA order.order = c(0, 0, 0)
will generate White Noise.order = c(2, 0, 0)
will generate an AR(2) series.order = c(0, 0, 2)
will generate an MA(2) series.ar
a vector of lengthp
containing theAR(p)
coefficientsma
a vector of lengthq
containing theMA(q)
coefficients
n
length of simulated time seriessd
the standard deviation of the Gaussian errors. Defaults to 1.rand.gen = rnorm
can specify a function to generate the innovations. Defaults to normal distribution generator.innov = rand.gen(n, ...)
can specify your own series of error here.
# AR(1), with rho=0.7
ar.epsilon <- arima.sim(model = list(order = c(1,0,0), ar = 0.7), n = 200, sd=20)
# AR(2), with with parameters 1.5 and -.75
AR <- arima.sim(model = list(order = c(2, 0, 0), ar = c(1.5, -.75)), n = 200)
# MA(3), with parameters 0.5, 0.4, and 0.2
sim_ma3_05 <- arima.sim(model = list(order = c(0,0,3), ma = c(0.5, 0.4, 0.2)), n=200)