You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ggnet2绘制网络遇多重图错误及节点入度中心度调整问题

问题1:为何示例代码会生成多重图?

你用sample(LETTERS, size = 20, replace = TRUE)生成边数据时,重复采样会导致相同的起点-终点对多次出现(比如两次生成from="A", to="B")。igraph的graph_from_data_frame()函数默认会保留这些重复边,形成多重图(multiple graph)——即两个节点之间存在多条平行边。而ggnet2()不支持绘制这种包含平行边的多重图,因此会抛出错误。

你可以用is_multiple(g)验证图是否为多重图,或者用simplify(g)去掉重复边(合并平行边)来解决报错问题:

g <- simplify(graph_from_data_frame(df, directed = TRUE))
ggnet2(g)
问题2:如何根据入度中心度调整节点大小?

你之前的错误在于:inboundCentrality是添加在边数据框中的属性,而ggnet2()的node.size参数需要的是节点层面的属性。每个节点只需要一个入度值,而非每条边对应一个值。

正确的做法是在创建图后,计算每个节点的入度并添加为节点属性,再传递给ggnet2():

library(igraph)
library(ggplot2)
library(GGally)
library(dplyr)

# 生成边数据并过滤自环
df <- data.frame(from = sample(LETTERS, size = 20, replace = TRUE),
                 to = sample(LETTERS, size = 20, replace = TRUE)) %>%
  filter(from != to)

# 创建有向图(若需无向图,修改directed = FALSE)
g <- graph_from_data_frame(df, directed = TRUE)

# 计算入度并添加为节点属性
V(g)$in_degree <- degree(g, mode = "in")

# 用节点的入度属性设置大小
ggnet2(g, node.size = "in_degree")

如果需要对入度值做缩放(避免节点过大/过小),可以用scales::rescale()调整:

V(g)$in_degree_scaled <- scales::rescale(degree(g, mode = "in"), to = c(3, 10))
ggnet2(g, node.size = "in_degree_scaled")

内容的提问来源于stack exchange,提问作者D. Studer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 02:15:17