r - R索引矩阵以在绘图坐标中使用
问题描述
我正在尝试在 R 中绘制一个时间社交网络。我的方法是为所有节点创建一个主图和布局。然后,我将根据一系列顶点 ID 对图进行子集化。但是,当我这样做并布局图形时,我会得到完全不同的节点位置。我想我要么错误地对布局矩阵进行了子集化。我找不到我的问题所在,因为我已经完成了一些较小的矩阵子集,而且一切似乎都运行良好。
我在网络图中有一些示例代码和问题图像。
library(igraph)
# make graph
g <- barabasi.game(25)
# make graph and set some aestetics
set.seed(123)
l <- layout_nicely(g)
V(g)$size <- rescale(degree(g), c(5, 20))
V(g)$shape <- 'none'
V(g)$label.cex <- .75
V(g)$label.color <- 'black'
E(g)$arrow.size = .1
# plot graph
dev.off()
par(mfrow = c(1,2),
mar = c(1,1,5,1))
plot(g, layout = l,
main = 'Entire\ngraph')
# use index & induced subgraph
v_ids <- sample(1:25, 15, F)
sub_l <- l[v_ids, c(1,2)]
sub_g <- induced_subgraph(g, v_ids)
# plot second graph
plot(sub_g, layout = sub_l,
main = 'Sub\ngraph')
第二个图中的顶点应该与第一个图中的顶点相匹配。
解决方案
不幸的是,您在生成图表后设置了随机种子,因此我们无法准确重现您的结果。我将使用相同的代码,但set.seed
在图形生成之前。这使结果看起来与您的不同,但可以重现。
当我运行您的代码时,我没有看到与您显示的完全相同的问题。
您的代码(已set.seed
移动和scales
添加)
library(igraph)
library(scales) # for rescale function
# make graph
set.seed(123)
g <- barabasi.game(25)
# make graph and set some aestetics
l <- layout_nicely(g)
V(g)$size <- rescale(degree(g), c(5, 20))
V(g)$shape <- 'none'
V(g)$label.cex <- .75
V(g)$label.color <- 'black'
E(g)$arrow.size = .1
## V(g)$names = 1:25
# plot graph
dev.off()
par(mfrow = c(1,2),
mar = c(1,1,5,1))
plot(g, layout = l,
main = 'Entire\ngraph')
# use index & induced subgraph
v_ids <- sort(sample(1:25, 15, F))
sub_l <- l[v_ids, c(1,2)]
sub_g <- induced_subgraph(g, v_ids)
# plot second graph
plot(sub_g, layout = sub_l,
main = 'Sub\ngraph', vertex.label=V(sub_g)$names)
当我运行您的代码时,两个图的节点都位于相同的位置。这不是我在您问题的图表中看到的。我建议您只运行这段代码,看看是否得到相同的结果(两个图中相同位置的节点)。我的版本中两个图表之间的唯一区别是节点标签。当您获取子图时,它将节点从 1 重新编号到 15,因此节点上的标签不一致。您可以通过在获取子图之前将节点标签存储在图中来解决此问题。具体来说,V(g)$names = 1:25
在您的语句之后立即添加E(g)$arrow.size = .1
。然后再次运行整个事情
,从set.seed(123)
. 这将保留原始编号作为节点标签。
该图看起来略有不同,因为新的子图不会占用所有空间,因此会被拉伸以用完空白空间。
推荐阅读
- reactjs - 使用 Expo 时如何在 IOS 和 Android 上使用谷歌地图
- firebase - 具有多重身份验证的 Firebase 身份验证
- amazon-web-services - 使用 sigv4 进行身份验证的 API 网关给出“消息:缺少身份验证令牌”
- ios - 更新后 UITableView 的 numberOfRowsInSection 中的 return 语句崩溃
- javascript - 我可以在 quill 中获取当前可见文本的事件吗?
- redis - 增加 Redis 排序集中的成员
- android - 召回 CallBack(); 需要使用时的功能
- react-native - React Native - 如果我在 React Native 中隐藏警告可以吗?
- python-3.x - 如何比较python中的两个.ico(图标)文件?
- rxjs - 在 takeUntil 之后做一些动作