在同一地块上进行多度分布

时间:2018-05-11 15:46:22

标签: r plot

我使用下面的代码生成了500个随机二分网络。我想在单个图上绘制至少10个这些网络的度数分布(带幂律线的对数 - 对数图),以便将它们与我的无标度网络的对数 - 对数图进行直观比较。我知道如何一次绘制单个网络的度分布图,但同一图表上的多个图表变得难以捉摸。如果可能的话,我还可以使用具有皮尔森相关系数和所有500个网络的斜率值的excel表。

set.seed(1)
    gs1 <- list()
    for (x in seq_len(500L)) 
    {
      gs1[[x]] <- sample_bipartite(358, 27, type = "gnm",m = 827, directed = TRUE)
    }
编辑:我正在寻找具有学位分布的电力法律专栏。

感谢任何帮助。谢谢大家。

1 个答案:

答案 0 :(得分:3)

认为我正在制作你正在寻找的情节。如果没有,请解释它有何不同。

您可以绘制第一个分布,然后使用lines添加到分布。因为每个分布具有不同的度数,所以我将遍历所有分布以找到上限。

library(igraph)

## Reproduce your data, paramterizing the number of graphs
NumG = 500L
set.seed(1)
gs1 <- list()
for (x in seq_len(NumG)) {
      gs1[[x]] <- sample_bipartite(358, 27, type = "gnm",m = 827, directed = TRUE)
}

## Find upper limit on degrees
MaxDeg = rep(0,NumG)
for(i in 1:NumG) {
    DD = degree_distribution(gs1[[i]])
    MaxDeg[i] = length(DD)
}
MaxMax = max(MaxDeg)

## Plot first distribution
plot(1:MaxDeg[1], degree_distribution(gs1[[1]]), 
    xlim=c(1,MaxMax), log="xy", type="l",
    xlab="Log-Degree", ylab="LogFrequency")

## Plot all the rest
for(i in 2:NumG) {
    lines(1:MaxDeg[i], degree_distribution(gs1[[i]]), col=rainbow(NumG)[i])
}

Degree Distributions

您可以看到两种节点的两个部分。总的来说,这些似乎非常一致。

添加一些细节

有两种不同类型的节点。从您的生成声明

gs1[[x]] <- sample_bipartite(358, 27, type = "gnm",m = 827, directed = TRUE)

有358个节点只有链接离开它们(来源)。还有27个节点没有链接(Sinks)。以下是列表中第一个图表的图表,gs1 [1]。

LO = layout_as_bipartite(gs1[[1]])
plot(gs1[[1]], layout=LO, vertex.size=8, 
    edge.arrow.size=0.3, vertex.label=NA)

Graph 1

源位于顶部,接收器位于底部。两种类型的节点具有非常不同的度分布。通过构建,您的所有图表都有827个链接。这些留下358个来源并进入27个汇。平均而言,每个来源将有827/358 = 2.31个链接。平均来说,水槽会有 858/27 = 30.63个链接。在上述度分布图中很容易看出这两种不同的分布。

在我看来,学位分布遵循幂律, 既没有源和汇,也没有一个单独。 我不确定你想要计算什么相关系数。所以我对这些主题没有帮助。