在R中如何用不同颜色同图可视化两个二进制邻接矩阵?
我来给你一个清晰的解决方案,用ggplot2包就能轻松实现这个需求,步骤如下:
步骤1:准备数据
首先先创建你提到的两个邻接矩阵,然后把矩阵转换成ggplot2适用的长格式数据框,同时给每个矩阵加上专属标识来区分来源:
# 创建邻接矩阵A和B A <- matrix(c(1, 1, 1, 1, 0, 0, 0, 0, 0), nrow=3, ncol=3, byrow = TRUE) B <- matrix(c(0, 0, 0, 0, 0, 1, 1, 1, 1), nrow=3, ncol=3, byrow = TRUE) # 加载tidyverse包(包含ggplot2和数据处理工具) library(tidyverse) # 转换矩阵A为长格式,只保留有连接的点(值为1) df_A <- as.data.frame.table(A) %>% rename(User_Y = Var1, User_X = Var2, Value = Freq) %>% mutate(Network = "社交网络A") %>% filter(Value == 1) # 转换矩阵B为长格式,只保留有连接的点(值为1) df_B <- as.data.frame.table(B) %>% rename(User_Y = Var1, User_X = Var2, Value = Freq) %>% mutate(Network = "社交网络B") %>% filter(Value == 1) # 合并两个数据框 df_combined <- bind_rows(df_A, df_B) # 将用户编号转为数值型(默认转换后是因子,转成数值更符合需求) df_combined <- df_combined %>% mutate(User_X = as.numeric(User_X), User_Y = as.numeric(User_Y))
步骤2:绘制可视化图
用散点图展示两个网络的连接关系,通过颜色区分不同网络:
ggplot(df_combined, aes(x = User_X, y = User_Y, color = Network)) + geom_point(size = 6) + # 放大点的尺寸,让连接关系更清晰 scale_x_continuous(breaks = 1:3, limits = c(0.5, 3.5)) + # 设置X轴刻度为1-3,避免点贴边 scale_y_continuous(breaks = 1:3, limits = c(0.5, 3.5)) + # Y轴同理 labs(x = "用户(X轴)", y = "用户(Y轴)", color = "网络来源", title = "两个社交网络邻接矩阵对比可视化") + theme_minimal() + theme( panel.grid.major = element_blank(), # 去掉网格线,让图更简洁 panel.grid.minor = element_blank(), plot.title = element_text(hjust = 0.5) # 标题居中 )
说明
- 我们只筛选
Value == 1的行,因为邻接矩阵中1代表用户间存在连接,0代表无连接,无需展示; - 颜色参数
color = Network会自动为两个网络分配不同颜色,并生成对应的图例; - 调整坐标轴范围是为了让散点不会紧贴图的边缘,提升可读性。
内容的提问来源于stack exchange,提问作者kevin2019
相关产品推荐
相关产品推荐

