You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:21:59