Here is the link to the original problem. Briefly, I was unable to plot a custom x-axis showing abbreviated months in a time series plot of a zoo object.
plot.zoo() function set
xaxt = "n"
to suppress plotting of the x-axis
Since I needed abbreviated months to be plotted as the x-axis, I loaded a csv file with the dates of the first of each month as follows and converted it to dates:
(I included Dec 2004, because otherwise “Jan” would not be plotted)
month < - read.csv("~/R/2005months.csv")
month$month < - as.Date(month$month, "%Y-%m-%d")
plot.zoo command I added the following line –
axis(1, month$month, format(month$month, "%b"))
The solution was inspired by a post from Gabor Grothendieck on r-help. The original solution is still the only way to plot abbreviated months for time series plots of monthly averages.
Let’s say you have several categories with multiple data points each that you would like to plot as individual points. Even if you have only a single point, the R graphics package will plot a line (without a box for lack of data). Overriding the default setting with e.g. pch = 1 does not help.
boxplot function (or the
plot function for that matter) – correctly – generates a boxplot for each category. If you would like to see individual points instead of boxes, the following code snippet could help by using the
# Plot the boxplot as usual, but in white colour to make the boxes invisible, but keep the axes.
boxplot(m$var ~ m$cat, xlab = "Category", ylab = "Variable", border = "white")
# Plot the data again into the same plot and customise the point shape, etc to your liking
points(m$var ~ m$cat, pch = 1)
Here are a few more plotting options for boxplots:
Let’s start plotting the full set
Plot labels for a subset in full set plot (label all points x < -1)
text(subset(b$mod, b$x < -1), subset(b$x, b$x < -1), subset(b$site, b$x < -1), cex=0.6, pos=4, col="red")
Plot subset with x > -1
plot(subset(b$mod, b$x > -1), subset(b$x, b$x > -1))
Plot horizontal gridlines
grid(nx = NA, ny = NULL)
I use the R package zoo to plot a yearly time series of weekly averaged data. The problem is that my date variable (m.all$date) contains week numbers and these are plotted as x-Axis. What I would rather like to to is plot abbreviated months.
I can suppress the x-Axis in the plot using
xaxt = "n" in the
plot.zoo command, but cannot define a suitable x-Axis that plot abbreviated months instead.
I tried several variations of the
axis.Date() commands without luck!
# Create zoo object for time series plot
z < - zoo(cbind(m.all$obsTPM, m.all$modTPM, m.all$refTPM), m.all$date)
names(z) <- c("Observation","Model estimate", "Model reference")
plot.zoo(z[, 1], type = "l", lwd = 1, col = "black", screens = c(1), xlab = "Date (2005)", ylim=c(m.all$obsTPM,m.all$modTPM, m.all$refTPM), ylab = "Concentration (pg m-3)", main = "Alert TPM: Observations vs. Model Estimates, Weekly Means")
lines(z[, 2], lty = 5, lwd = 1, col = "blue")
lines(z[, 3], lty = 3, lwd = 1, col = "red")
legend("topleft", lty = c(1,5,3), legend = colnames(z), bty = "n", col = c("black","blue","red"), lwd = 1)