我有一个相当大但非常稀疏的邻接矩阵(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中实现此操作感兴趣。
statnet
包,并在gplot
函数中设置displayisolates = FALSE
。如果您坚持使用igraph
,则可以设置一个阈值来绘制大于常数的边缘。 - monarque13