绘制邻接矩阵时定位不正确-R ggplot

时间:2018-10-22 07:46:43

标签: r ggplot2 plot

我想绘制象棋盘一样的图的邻接矩阵(黑色表示1s,白色表示0s,反之亦然)

Bus

使用以下代码:

     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    0    0
[2,]    1    0    0    0    0
[3,]    1    0    0    0    0
[4,]    1    0    0    0    0
[5,]    1    0    0    0    0

我得到以下输出:

enter image description here

为什么?

2 个答案:

答案 0 :(得分:5)

以下代码应返回您要查找的内容:

mm %>% 
  melt() %>% 
  ggplot(aes(Var2, Var1)) + 
  geom_tile(aes(fill = value, 
                color = value)) + 
  coord_equal() + 
  scale_fill_manual(values = c("TRUE" = "black", "FALSE" = "white")) + 
  scale_color_manual(values = c("TRUE" = "white", "FALSE" = "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_y_reverse()

plot

说明:

  1. 通常将scale_XX_manual与命名向量一起使用,以确保映射正确的值更为安全;
  2. 默认情况下,图的原点位于左下角,而不是左上角。如果要从顶部开始,请反转y轴。

旁注:将来,可以通过省略与外观相关的代码,直到完成对图的更重要方面的调整来将此类问题最小化。如果您将坐标轴和图例标签留在图中,则可能更容易发现上述问题:

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))

plot

答案 1 :(得分:1)

首先,矩阵索引和直角坐标不同。我制作一个像这样的矩阵:

> x <- matrix(c(1, rep(0, 8)), 3, 3)

     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    0    0
[3,]    0    0    0

您可以看到索引[1, 1]1。它位于矩阵的左上方。但是,当我用image()绘制矩阵时,值1位于左侧的按钮中:

enter image description here

这是因为矩阵索引系统的[1, 1]和直角坐标系统的(1, 1)不在同一位置。

要从矩阵索引转换为直角坐标,可以尝试:

y <- t(x)[ , ncol(x):1]
image(y)

enter image description here

您成功将矩阵呈现给具有相同位置的热图。


因此,使用您的数据,可以先将其转换为直角坐标并绘制:

mm2 <- t(mm)[ , ncol(mm):1]

mm2 %>% 
  melt() %>% 
  ggplot(aes(Var1, Var2)) + # Don't exchange Var1 and Var2 here
  geom_tile(aes(fill = value, 
                color = value)) + 
  coord_equal() + 
  scale_fill_manual(values = c("TRUE" = "black", "FALSE" = "white")) + 
  scale_color_manual(values = c("TRUE" = "white", "FALSE" = "black")) + 
  theme_bw()

enter image description here