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 = FALSEto 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)
modela list with the following elements. The coefficients must be provided through the elementsarandma.ordera vector of length 3 containing theARIMA(p, d, q)orderpspecifies AR order;dis the differencing order;qspecifies 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.ara vector of lengthpcontaining theAR(p)coefficientsmaa vector of lengthqcontaining theMA(q)coefficients
nlength of simulated time seriessdthe standard deviation of the Gaussian errors. Defaults to 1.rand.gen = rnormcan 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)