繁体   English   中英

ggplot2-将分割线添加到矩阵图中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM