Add tick marks to facet plots in R
<p>I wish to add tick marks to facet plots.
For instance, to a facet plot like this:</p>

<pre><code>require(ggplot2)

p &lt;- ggplot(mpg, aes(displ, hwy)) + 
     geom_point() + 
     theme_minimal() +
     geom_hline(yintercept=10, linetype="solid") +
     geom_vline(xintercept=1.0, linetype="solid") +
     scale_x_continuous(limits=c(1,8), expand =c(0,0), 
     breaks = rep(2:7)) +
     scale_y_continuous(limits = c(10, 50), expand = c(0,0), 
     breaks = c(20,30,40)) +
     facet_wrap(~cyl) +   
     theme(panel.margin.x=unit(1.2, "lines"),
     panel.margin.y=unit(1.2, "lines"))
p
</code></pre>

<p><a href="https://i.stack.imgur.com/XJQlS.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/XJQlS.jpg" alt="enter image description here"></a></p>

<p>I wish to add tick marks so that it could look like this (please note that although tick marks are added to all facets, tick labels are displayed only at the left and bottom facets):</p>

<p><a href="https://i.stack.imgur.com/2ncUD.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/2ncUD.jpg" alt="enter image description here"></a></p>

<p>I’ve tried using the <code>annotation_custom</code> function to add line grobs to the axis. However my attempts are not working.</p>

<pre><code>require(gridExtra)
require(grid)   
x.breaks = rep(2:7)
y.breaks = c(20,30,40)

for (i in 1:length(x.breaks))   {
  p = p + annotation_custom(grob = linesGrob(y = unit(c(0, 5), "npc"),
                       gp=gpar(col= "black")),  
                       xmin = x.breaks[i], 
                       xmax = x.breaks[i], 
                       ymin = 8.69, 
                       ymax = 8.89)
  }

for (i in 1:length(y.breaks))   {
  p = p + annotation_custom(grob = linesGrob(x = unit(c(0, 5), "npc"),
                       gp=gpar(col= "black")),  
                       xmin = 0.769,
                       xmax = 0.809,                           
                       ymin = y.breaks[i], 
                       ymax = y.breaks[i])
  }

gt = ggplotGrob(p)
gt$layout$clip[gt$layout$name=="panel"] &lt;- "off"
grid.draw(gt)
</code></pre>

<p>Does anyone have any suggestion? Thanks in advance.</p>