sds
sds

Reputation: 60004

Align grid with ticks

When I let plot draw the axis, grid aligns with ticks by default.

However, my plot is somewhat involved:

mytime <- as.POSIXct("2015-08-20") + seq(0,by=3600,length.out=7*24)
plot(x=mytime,y=rnorm(7*24),xaxt="n")
ticks <- mytime[seq(1,by=12,to=length(mytime))]
axis(1, ticks, strftime(ticks, "%a %H:%M"))
grid(ny=NULL,nx=14)

and I cannot get the grid to align with the ticks:

grid and ticks do not align

How do I make them align?

Upvotes: 1

Views: 599

Answers (2)

josep maria porr&#224;
josep maria porr&#224;

Reputation: 1388

As pointed in the previous answer, the solution is using the abline function and avoid that the vertical guidelines are plotted in wrong locations. You can achieve both things by replacing the last line of your code

grid(ny=NULL,nx=14)

by

grid(ny=NULL,nx=NA)
abline(v = ticks, lty = 3, col = "lightgray")

to obtain

enter image description here

By the way, there are previous questions related to this that could have helped you:

  1. R: Finding the location of tick marks when plotting dates
  2. Align grid() to plot ticks

Upvotes: 2

sds
sds

Reputation: 60004

Looks like abline is the answer:

mytime <- as.POSIXct("2015-08-20") + seq(0,by=3600,length.out=7*24)
plot(x=mytime,y=rnorm(7*24),xaxt="n")
ticks <- c(mytime[seq(1,by=12,to=length(mytime))],mytime[1]+7*24*3600)
axis(1, ticks, strftime(ticks, "%a %H:%M"))
grid(ny=NULL,nx=NA)
abline(v=ticks[seq(1,length(ticks),2)],lty="dotted",col="lightgray")

enter image description here

Upvotes: 0

Related Questions