r - 可视化复用网络
问题描述
如何将其可视化为多路复用网络?它目前将边缘读取为节点,我不确定如何根据权重(即 1、2、3)添加边缘颜色。
mat <- read.table(header=FALSE,
text="
- - 2 - 2 1 1 1 1 1 1 1 2 1 1 -
- - - - - 1 2 1 1 1 1 1 2 1 1 -
2 - - - 2 2 1 1 1 1 1 1 2 1 1 1
- - - - - 1 2 1 1 1 1 1 2 1 3 -
2 - 2 - - - 1 - 1 1 1 1 2 1 1 1
1 1 2 1 - - - - - - - 2 1 2 2 2
1 2 1 2 1 - - - - - - 1 2 1 - 2
1 1 1 1 - - - - - - - - - - - 2
1 1 1 1 1 - - - - - - - - - - 2
1 1 1 1 1 - - - - - - - - - - 2
1 1 1 1 1 - - - - - - - - - 2 2
1 1 1 1 1 2 1 - - - - - - - - 2
2 2 2 3 2 1 2 - - - - - - - - 1
1 1 1 1 1 2 1 - - - - - - - - 2
1 1 1 - 1 2 - - - - 2 - - - - 2
- - 1 - 1 2 2 2 2 2 2 2 1 2 2 -
")
g <- graph_from_data_frame(mat, directed=FALSE)
plot(g)
解决方案
我认为您打算将上面提供的表格作为邻接矩阵。read.table 会给你一个 data.frame,而不是一个矩阵,所以你需要使用as.matrix
. 此外,如果您将破折号放入矩阵中,整个内容将被解释为字符,而不是数字。因此,我将您的破折号更改为零,然后用于graph_from_adjacency_matrix
获取图表。plot
您可以通过指定 edge.color 参数来设置边缘颜色。
library(igraph)
mat <- read.table(header=FALSE,
text=" 0 0 2 0 2 1 1 1 1 1 1 1 2 1 1 0
0 0 0 0 0 1 2 1 1 1 1 1 2 1 1 0
2 0 0 0 2 2 1 1 1 1 1 1 2 1 1 1
0 0 0 0 0 1 2 1 1 1 1 1 2 1 3 0
2 0 2 0 0 0 1 0 1 1 1 1 2 1 1 1
1 1 2 1 0 0 0 0 0 0 0 2 1 2 2 2
1 2 1 2 1 0 0 0 0 0 0 1 2 1 0 2
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 2
1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 2
1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 2
1 1 1 1 1 0 0 0 0 0 0 0 0 0 2 2
1 1 1 1 1 2 1 0 0 0 0 0 0 0 0 2
2 2 2 3 2 1 2 0 0 0 0 0 0 0 0 1
1 1 1 1 1 2 1 0 0 0 0 0 0 0 0 2
1 1 1 0 1 2 0 0 0 0 2 0 0 0 0 2
0 0 1 0 1 2 2 2 2 2 2 2 1 2 2 0")
mat = as.matrix(mat)
g <- graph_from_adjacency_matrix(mat, weighted=TRUE, mode="undirected")
plot(g, edge.color=E(g)$weight)
我认为这就是你想要得到的,但如果不是,请试着更清楚地说出你希望得到什么。
推荐阅读
- c - 使用 Qemu 进行裸机 X86 组装
- python - 比较三列并选择最高的
- reactjs - 无法从 AssyncStorage 检索数据
- .net - 无法从 Mac 上的主机连接到 docker 容器
- python - 使用 Python 进行高效的张量收缩
- apache-kafka - Kafka - 每小时发布 80 亿条消息
- sql-server - SQL Server 意外死锁
- node.js - 我是否必须在网站项目中包含 UI 上所有库的列表?
- tensorflow - 如果 Google 的 WaveNet 模型已经将音频作为输入,为什么还需要它来生成音频?
- swift - WatchOS 陀螺仪校准中断