Question

I have merged two xts objects and want to plot them in a single display. This works fine when I use points (type="p"). However, when I use lines (type="l") a problem occurs: the first series is shown only in the index region that is not covered by the second series. I would expect the lines to be as long as the "points". A reproducible example is posted below.

As this occurs with both the default and the ggplot plotting commands, I suspect that this relates to some property of time-series data.

What is the reason for this behaviour? Is there a proper way of plotting this kind of data?

## Minimal example for Reproduction
library(xts)
library(ggplot)
# create two artificial xts objects
xts1 <- xts(1:15,Sys.Date()+10+seq(from=1,by=5,length.out=15))
xts2 <- xts(1:20,Sys.Date()+seq(from=1,by=2,length.out=20))

# merge them
merged.xts <- merge.xts(xts1,xts2)

# Plot as zoo objects to allow for panels
# plotting with points shows both series
plot(as.zoo(merged.xts),type="p",plot.type="single")

Plotting with points

# plotting with lines
# The second series is "shortened"
plot(as.zoo(merged.xts),type="l",plot.type="single")

Plotting with lines

# Similar behaviour with ggplot2
autoplot(merged.xts)
Was it helpful?

Solution

Quite simply, type="l" looks the way it does because you can't plot a line on a single point. Set type="b" to see both lines and points.

points and lines and points and lines... it

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top