r - 同一图上的多度分布
问题描述
我使用下面的代码生成了 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)
}
编辑:我正在寻找具有度数分布的幂律线。
任何帮助表示赞赏。谢谢大家。
解决方案
我认为我正在制作您正在寻找的情节。如果不是,请解释它有何不同。
您可以绘制第一个分布,然后使用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])
}
您可以看到这两种节点的两个部分。总的来说,这些看起来相当一致。
添加一个小细节
有两种不同类型的节点。从你的生成语句
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)
源在顶部,水槽在底部。这两种类型的节点具有完全不同的度分布。通过构建,您的所有图表都有 827 个链接。这些离开 358 个源并进入 27 个接收器。平均而言,每个来源将有 827/358 = 2.31 个链接。平均而言,接收器将有 858/27 = 30.63 个链接。在上面的度数分布图中很容易看到这两个不同的分布。
在我看来,度分布并不遵循幂律,既不是源和汇一起,也不是单独的。我不确定您要计算什么相关系数。所以我在这些话题上对你没有帮助。
推荐阅读
- javascript - 使用滚动捕捉时无法滚动到页面顶部
- android - 在android auto上更改状态栏的样式
- javascript - 使用键调用项目列表的数组。反应.js
- java - 请求 API url 时添加用户输入
- c - 打印给定 4 位数字的副本,但每个素数后面都跟着比它大 1 的数字
- java - 在 IntelliJ IDEA 中为 Gradle 项目添加“已提供”范围内的依赖项
- node.js - 为什么要转换我的 package.json ?当我是“npm i”、“npm uni”时
- r - R ggplot2:将列的值放在堆叠条的顶部
- c++ - 从 dll Visual C++ 导出外部变量
- javascript - 图像组合时,javascript 承诺无法按预期工作