绘制大型邻接矩阵而非图的最有效方法是什么?

问题描述

我正在寻找一种在R中绘制大型邻接矩阵(> 1M节点)的有效方法。 目的不是将它们绘制为网络图,而是绘制邻接矩阵本身。

这是网络分析尤其是社区检测领域中非常常见的可视化,但是我似乎找不到在R中实现这种绘图的方法。我能找到的最接近的函数是{{1} },但似乎无法处理这种大小的矩阵。

下面是Reichardt & Bornholdt的论文中期望结果的示例。
邻接矩阵可以从Stanford Large Network Dataset Collection下载。

enter image description here

解决方法

我的第一个赌注是看Matrix包中的image方法。一个例子可能是这样的:

#####
# simulate a random matrix
n <- 1000000L # number of nodes
set.seed(1)
rng_i <- sample.int(n,size = 100L * n,replace = TRUE)
rng_j <- sample.int(n,replace = TRUE)
i <- c(1:n,rng_i,rng_j)
j <- c(1:n,rng_j,rng_i)
x <- runif(n * 100L)
x <- c(rep(1,n),x,x)

keep <- j <= i & c(rep(TRUE,tail(i,-n) != tail(j,-n))
j <- j[keep]
i <- i[keep]
x <- x[keep]

# use the image method from Matrix
library(Matrix)
mat <- sparseMatrix(i = i,j = j,x = x,symmetric = TRUE)
image(mat)

这需要一段时间,但结果是基于levelplot中的lattice。输出是一个大的空白图。

仔细考虑一下,如果您说一张102 x 102毫米的图片(〜4 x 4英寸)和一个1m x 1m的矩阵,那么如果我们忽略该矩阵,则每个矩阵条目都有〜.0001 x .0001 mm轴等。我对人类的感知或图像了解不多,我想您需要每英寸大量的像素才能绘制这些像素,并且我不确定这是否可以感知,除非附近有更大的群集非零条目。

另一方面,如果您更改n <- 10000L,则会得到:

enter image description here

相当快。上面的内容还说明了感知1/100 x 1/100较小的盒子有多困难。我猜想人们将不得不寻找更大邻域中相邻非零节点的数量,但我不知道有一个可以做到这一点的软件包。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...