title: Marking specific tiles in geom_tile() / geom_raster()
body: <p>Let's say I have a data.frame like this:</p>
  
  <pre><code>df &lt;- matrix( rnorm(100), nrow = 10)
  rownames(df) &lt;- LETTERS[1:10]
  molten &lt;- melt(df)
  molten$na &lt;- FALSE
  molten[ round(runif(10,  0, 100 )), "na" ] &lt;- T
  head(molten)
  
    Var1 Var2      value    na
  1    A    1 -0.2413015 FALSE
  2    B    1  1.5077282 FALSE
  3    C    1 -1.0798806 TRUE
  4    D    1  2.0723791 FALSE
  </code></pre>
  
  <p>Now, I want to plot a tile (or raster)  plot using ggplot and <em>mark</em> those tiles which have <code>na=TRUE</code>. Currently I plot the marks as points:</p>
  
  <pre><code>g &lt;- ggplot( molten ) +
    geom_raster( aes( x = Var1, y = Var2, fill = value )  ) + 
    scale_fill_gradient2( low = "blue", high = "red", na.value="black", name = "" ) +
    geom_point( aes( x = Var1, y = Var2, size= as.numeric(na) ) )
  </code></pre>
  
  <p><img src="https://i.stack.imgur.com/VdgDs.png" alt="tiles with points"></p>
  
  <p>However, I don't like this plot very much for two reasons:</p>
  
  <ol>
  <li>There is still a point drawn even if <code>molten$na = FALSE</code>. Sure I could specify <code>data=molten[ molten$na, ]</code>, but actually this should be possible without specifying another data set.</li>
  <li>I don't like the points, but would rather like to have frames around or stripes through the tiles. But I have no idea how to achieve this. If I would use <code>geom_segment()</code> for stripes, how would I specify <code>yend</code>and <code>xend</code>?</li>
  </ol>
  
  <p>Any help is appreciated.</p>
  
  <p><strong>Edit 1</strong>
  Here is the <code>dput</code>for reproducibility:</p>
  
  <pre><code>structure(list(Var1 = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 
  4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), .Label = c("A", 
  "B", "C", "D", "E", "F", "G", "H", "I", "J"), class = "factor"), 
      Var2 = c(6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 
      9L, 9L, 9L, 9L, 10L, 10L, 10L, 10L), value = c(-0.468920099229389, 
      0.996105987531978, -0.527496444770932, -0.767851702991822, 
      -0.36077954422072, -0.145335912847538, 0.114951323188032, 
      0.644232124274217, 0.971443502096584, 0.774515290180507, 
      -0.436252398260595, -0.111174676975868, 1.16095688943808, 
      0.44677656465583, -0.708779168274131, 0.460296447139761, 
      -0.475304748445917, -0.481548436194392, -1.66560630161765, 
      -2.06055347675196), na = c(FALSE, FALSE, FALSE, FALSE, FALSE, 
      FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, 
      FALSE, FALSE, TRUE, FALSE, FALSE, FALSE)), .Names = c("Var1", 
  "Var2", "value", "na"), row.names = c(51L, 52L, 53L, 54L, 61L, 
  62L, 63L, 64L, 71L, 72L, 73L, 74L, 81L, 82L, 83L, 84L, 91L, 92L, 
  93L, 94L), class = "data.frame")
  </code></pre>