[英]ggplot2 - Adding division lines to a matrix plot
我想修改以下ggplot(从这个问题中获取和修改),以便它在正方形之间显示清晰的分界线。
我有这个:
我要这个:
library(ggplot2)
library(reshape2)
mm <- structure(c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE,
FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE,
FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE,
FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE,
FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE,
TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE,
TRUE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE,
TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE,
TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE,
TRUE, TRUE, TRUE), .Dim = c(10L, 10L), .Dimnames = list(NULL,
c("n1", "n2", "n3", "n4", "n5", "n1.1", "n2.1", "n3.1", "n4.1",
"n5.1")))
melted <- melt(mm)
p <- ggplot(melted, aes(x = Var2, y = Var1, fill = value)) +
geom_tile() +
geom_raster(aes(fill=value)) +
scale_fill_manual(values = c("white", "black")) +
theme_bw() +
theme(legend.position = "none") +
theme(axis.title.x=element_blank(),
axis.text.x=element_blank(),
axis.ticks.x=element_blank(),
axis.title.y=element_blank(),
axis.text.y=element_blank(),
axis.ticks.y=element_blank())
print(p)
您可以通过将color
映射到除fill
之外的值来获得大部分信息。
唯一的问题是黑色正方形的外边界是白色的。 要删除此错误,可以修改轴扩展,以便面板边框创建黑线。
mm %>%
melt() %>%
ggplot(aes(Var2, Var1)) +
geom_tile(aes(fill = value,
color = value)) +
coord_equal() +
scale_fill_manual(values = c("black", "white")) +
scale_color_manual(values = c("white", "black")) +
theme_bw() +
theme(axis.title = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
panel.grid = element_blank()) +
guides(fill = FALSE, color = FALSE) +
scale_x_discrete(expand = c(0,0)) +
scale_y_discrete(expand = c(0,0))
我喜欢@neilfws答案。 但是,我认为白色或黑色瓷砖周围不同颜色边框的出现实际上是由眼睛看到对比度的方式引起的错觉。 因此,这是一种替代方法-仅在所有图块周围使用灰色边框:
ggplot(melted, aes(x = Var2, y = Var1, fill = value)) +
geom_tile(color='gray50') +
scale_fill_manual(values = c("white", "black")) +
theme_bw() +
theme(legend.position = "none",
axis.title.x=element_blank(),
axis.text.x=element_blank(),
axis.ticks.x=element_blank(),
axis.title.y=element_blank(),
axis.text.y=element_blank(),
axis.ticks.y=element_blank(),
panel.grid = element_blank(),
panel.border = element_blank())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.