我想绘制象棋盘一样的图的邻接矩阵(黑色表示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
我得到以下输出:
为什么?
答案 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()
说明:
scale_XX_manual
与命名向量一起使用,以确保映射正确的值更为安全; 旁注:将来,可以通过省略与外观相关的代码,直到完成对图的更重要方面的调整来将此类问题最小化。如果您将坐标轴和图例标签留在图中,则可能更容易发现上述问题:
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))
答案 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
位于左侧的按钮中:
这是因为矩阵索引系统的[1, 1]
和直角坐标系统的(1, 1)
不在同一位置。
要从矩阵索引转换为直角坐标,可以尝试:
y <- t(x)[ , ncol(x):1]
image(y)
您成功将矩阵呈现给具有相同位置的热图。
因此,使用您的数据,可以先将其转换为直角坐标并绘制:
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()