Theme manipulation in ggplot2: altering x and y grid lines

A.Krueger picture A.Krueger · Sep 19, 2011 · Viewed 12.8k times · Source

Is it possible to manipulate the spacing and size of dashed and dotted grid lines in ggplot using the themes? The following plot:

p + l + opts(panel.grid.major = theme_line(colour = 'black', linetype = 'dashed'), 
             panel.grid.minor = theme_line(colour = NA), 
             panel.background = theme_rect(colour = 'white'))

I'd like to change the spacing (such as in Illustrator) between dashed and dotted grid lines.

Additionally, does anyone know if the x-axis and y-axis grid lines can be manipulated separately? For instance, I want to turn off the x-axis grid lines in this example.

I have seen manipulation using vline and hline (Add a dotted vertical line on certain x-axis values using ggplot), but don't want to have to hard code that each time if possible.

dashed line

Answer

kohske picture kohske · Sep 19, 2011

You can use the power of lty. see Line Type Specification in ?par.

example:

qplot(1:5, 1:5) + opts(panel.grid.major = theme_line(linetype = "2925"))

As for the second question, at this time you cannot specify the v and h lines separately.
Here is a quick and dirty hack:

qplot(1:5, 1:5)
grid.edit("panel.grid.major.x.polyline", grep = TRUE, gp = gpar(lty = "5195"))
grid.edit("panel.grid.major.y.polyline", grep = TRUE, gp = gpar(lty = "33"))