假设我有一个这样的data.frame:
df <- matrix( rnorm(100), nrow = 10)
rownames(df) <- LETTERS[1:10]
molten <- melt(df)
molten$na <- FALSE
molten[ round(runif(10,  0, 100 )), "na" ] <- 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
现在,我想使用 ggplot 绘制平铺(或栅格)图并标记具有na=TRUE. 目前我将标记绘制为点:
g <- 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) ) )

但是,我不太喜欢这个情节,原因有两个:
- 即使 仍然画了一个点
molten$na = FALSE。当然我可以指定data=molten[ molten$na, ],但实际上这应该可以在不指定另一个数据集的情况下进行。 - 我不喜欢这些点,但更喜欢在瓷砖周围有框架或条纹。但我不知道如何实现这一目标。如果我要使用
geom_segment()条纹,我将如何指定yend和xend? 
任何帮助表示赞赏。
编辑 1
这里是dput再现性:
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")
    


