【发布时间】:2017-05-04 06:04:51
【问题描述】:
我有一个相当大(但非常稀疏)的邻接矩阵 (500x500),我试图在视觉上表示。在我看来,类似于力有向图的东西是我最好的选择,在试图找出实现这一点的最佳方法时,我遇到了不止一个 R 资源。最有帮助的是http://kateto.net/network-visualization 上的网络可视化虽然我以前从未使用过 R,但它似乎为这种可视化提供了许多有用的功能。
我已经设法在下面生成了一个图,但是图像相当小并且节点是堆叠的。
如果我打印到 pdf 而不是 PNG,分辨率会稍微好一些,但我仍然有堆叠问题。因此,我的问题是,如何在 R 中正确地绘制一个大的邻接矩阵来解决这些问题。
到目前为止,我的代码如下(最后几行我尝试了几种不同的方式来绘制我的数据)。非常感谢任何提示。提前谢谢你。
为方便起见,我已将引用到我的 GitHub 的两个文件上传到这里 https://github.com/BStricklin/DataViz。
plot.new()
library('igraph')
setwd("D:/Downloads/polnet2016/Data files")
nodes2 <- read.csv("nodes.csv", header=T, as.is=T)
links2 <- read.csv("nodeAdjacency.csv", header=T, row.names=1)
links2 <- as.matrix(links2)
head(nodes2)
head(links2)
net2 <- graph_from_incidence_matrix(links2)
net2 <- graph_from_adjacency_matrix(links2, mode = "undirected", weighted = TRUE)
net2 <- simplify(net2, remove.multiple = F, remove.loops = T)
V(net2)$label <- nodes2$id
deg <- degree(net2, mode="all")
V(net2)$size <- deg*3
#plot(net2)
#plot(net2, edge.label=round(E(net2)$weight, 3))
layout <- layout.reingold.tilford(net2)
#plot.igraph(net2,vertex.size=3,layout=layout.lgl)
plot.igraph(net2,vertex.size=3,vertex.label.cex=.5,layout=layout.fruchterman.reingold(net2, niter=10000))
编辑:对于任何想知道我最终是如何做到这一点的人,我必须使用 MATLAB 并使用图形和绘图函数。它看起来和 R 图像一样糟糕,但是通过对节点的一些自定义和缩放功能的使用,它运行得很好。不过,我仍然对如何在 R 中执行此操作感兴趣。
【问题讨论】:
-
看看矩阵与图表的对比图会很有趣en.wikipedia.org/wiki/Adjacency_matrix
-
你是对的@user20650,链接是kateto.net/network-visualization
-
@Zboson 如果你去我的 github 页面,可以说文件 nodeAdjacency.csv 就是图表。不同之处在于矩阵是加权的,而不是像您链接到的页面上那样简单地填充框,矩阵的数字代表连接的强度。
-
一种选择是使用
statnet包并在gplot函数中设置displayisolates = FALSE。如果你坚持使用igraph,你可以设置一个阈值来绘制大于常数的边。 -
我会考虑使用例如networkD3 制作交互式图表。这些通常比导出有用信息的静态图更有用
标签: r igraph adjacency-matrix adjacency-list-model