假设我有一个像这样的数据框:
molten <- data.frame(
Var1 = factor(
rep(c("A", "B", "C", "D"), 5),
levels = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J")
),
Var2 = rep(6:10, each = 4L),
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 = rep(c(FALSE, TRUE, FALSE, TRUE, FALSE), c(8L, 1L, 7L, 1L, 3L)),
row.names = c(
51L, 52L, 53L, 54L, 61L, 62L, 63L, 64L, 71L, 72L, 73L, 74L,
81L, 82L, 83L, 84L, 91L, 92L, 93L, 94L
)
)
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
?
size = ifelse(na, 1, NA)
而不是size = as.numeric(na)
怎么样? - bdemarestgeom_point(aes(x=Var1, y=Var2, size=ifelse(na, 1, NA)))
在每个瓷砖中都会给我一个点。 - Beasterfielddput(subset(molten, Var2 > 5 & Var1 %in% c("A", "B", "C", "D")))
的输出? - bdemarestdput
。无论如何,请看我的编辑。 - Beasterfield