如何控制网络布局算法的异常节点?

问题描述 投票:0回答:1

使用带有Fruchterman-Reingold布局算法的igraph包呈现大图(> 10000个节点;> 10000个边)。一些异常节点将使可视化变得困难,99%的节点挤在一起,而1%的异常节点位于远处。例如,99.9%的节点位于0到10之间,但0.1%的节点位于10000之外。问题是如何控制这些异常节点以呈现所有节点。

这是一个例子,其中0.2%的异常值节点使得完整的呈现变得困难。

> library(igraph)
> ig <- erdos.renyi.game(12000,1/10000,directed=TRUE,loops=FALSE)
> set.seed(12)
> ig.layout <- layout_with_fr(ig)
> apply(ig.layout,2,quantile,c(0,0.001,0.01,0.1,0.9,0.99,0.999,1))
               [,1]         [,2]
0%      -54.7584289   -58.192821
0.1%    -49.8806632   -51.090376
1%      -29.7822097   -33.073435
10%      -0.2196407    -1.170996
90%      10.1564691    10.513665
99%    2026.5245335   737.739440
99.9% 16433.7302032 13168.400710
100%  22614.7986797 22284.309659
r graph igraph outliers graph-layout
1个回答
1
投票

“控制”异常值的一种方法是摆脱它们。这将减少您的初始问题,但您仍然会遇到难以想象的大图。但是让我们一次处理一件事。首先是异常值。

不幸的是,您在生成图表后设置了种子。我将首先移动set.seed语句,以便结果可以重现。

library(igraph)
set.seed(12)
ig <- erdos.renyi.game(12000,1/10000,directed=TRUE,loops=FALSE)
ig.layout <- layout_with_fr(ig)
apply(ig.layout,2,quantile,c(0,0.001,0.01,0.1,0.9,0.99,0.999,1))
               [,1]          [,2]
0%    -5.359639e+01 -9.898871e+01
0.1%  -4.996891e+01 -5.046219e+01
1%    -3.040131e+01 -2.934615e+01
10%   -1.221806e-02  1.513951e-02
90%    1.207328e+01  1.130579e+01
99%    1.111746e+03  6.994646e+02
99.9%  1.418739e+04  1.182382e+04
100%   1.968552e+04  2.025938e+04

我得到的结果与你的相当。更重要的是,图表被异常值严重扭曲。

plot(ig, layout=ig.layout, vertex.size=4, vertex.label=NA,
    edge.arrow.size=0.4)

Original graph

但这些异常值是什么?

igComp = components(ig)
table(igComp$csize)
    1     2     3     4     5     6     7 10489 
 1041   137    42     8     5     1     1     1 

您的图表有一个非常大的组件和相当多的小组件。 “异常值”是小的,断开连接的组件中的节点。我的建议是,如果你想看到图表,请删除这些小组件。看看大部分。

C1 = induced_subgraph(ig, which(igComp$membership ==1))

set.seed(12)
C1.layout <- layout_with_fr(C1)
apply(C1.layout,2,quantile,c(0,0.001,0.01,0.1,0.9,0.99,0.999,1))
            [,1]        [,2]
0%    -18.111038 -30.5068075
0.1%  -11.257167 -14.4507491
1%     -4.570292  -3.2830470
10%     0.124789   0.1836629
90%     7.182714   7.1506193
99%    12.291679  13.1523646
99.9%  26.812703  23.6325447
100%   35.186445  26.8564644

现在布局更合理。

plot(C1, layout=C1.layout, vertex.size=4, vertex.label=NA,
    edge.arrow.size=0.4)

Big Component

现在“异常值”消失了,我们看到了图的核心。你现在有一个不同的问题。很难看到10500个节点并理解它,但至少你可以看到这个核心。祝你进一步深入探索,祝你好运。

© www.soinside.com 2019 - 2024. All rights reserved.