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

igraph可视化:如何按Barycenter Centrality四分位数为节点上色?

基于Barycenter Centrality为igraph节点分区间着色的实现方案

网络结构信息

我正在处理一个包含21个节点和44条带权边的连通网络,网络结构如下:

> E(G.final)
+ 44/44 edges from cc34dce (vertex names):
 [1] N --M  N --LS N --BT N --T  N --P  N --B  N --E  N --JL AN--A  PR--P  JB--J  JB--L. JB--LC JB--S  M --LS M --T  M --B 
[18] M --E  M --JL J --BT J --V  J --C  J --P  J --G  J --B  J --S  BT--V  BT--A  BT--C  BT--P  BT--S  BT--AL V --C  V --P 
[35] V --AL L.--S  T --B  T --E  A --C  C --B  C --S  C --AL B --E  B --S 
> V(G.final)
+ 21/21 vertices, named, from cc34dce:
 [1] N  AN PR JB M  LS J  BT V  L. LC T  A  C  P  G  B  E  S  AL JL

已完成的节点大小调整

此前已成功根据Current-Flow Closeness Centrality调整节点大小,实现代码:

centrality <- calculate_centralities(G.final, include = "Current-Flow Closeness Centrality")

V(G.final)$attribut.centrality <- unlist(centrality, use.names = T)

V(G.final)$attribut.centrality

plot(G.final,layout = layout_with_fr,vertex.color = "grey", edge.color = "black", vertex.label.family = "Times", vertex.label.color="black")

需求:基于Barycenter Centrality分区间着色

已完成Barycenter Centrality指标计算并设为节点属性:

info.centrality <- calculate_centralities(G.final, include = "Barycenter Centrality")

V(G.final)$attribut.info_centrality <- unlist(info.centrality, use.names = T)

V(G.final)$attribut.info_centrality

summary(V(G.final)$attribut.info_centrality)

需要按以下逻辑为节点分配颜色:

  • 指标值小于第一四分位数:一种颜色
  • 指标值介于第一和第三四分位数之间:一种颜色
  • 指标值大于等于第三四分位数:一种颜色

此前用cartography和igraph实现了效果,但美观度欠佳。

实现方案

可以直接通过quantile()函数提取四分位数,结合cut()函数创建分组,再映射颜色,代码如下:

# 提取Barycenter Centrality的第一和第三四分位数
q_vals <- quantile(V(G.final)$attribut.info_centrality, c(0.25, 0.75))

# 根据区间创建分组变量
V(G.final)$color_group <- cut(
  V(G.final)$attribut.info_centrality,
  breaks = c(-Inf, q_vals[1], q_vals[2], Inf),
  labels = c("low", "mid", "high")
)

# 定义颜色映射(可根据需求替换成更美观的配色)
color_map <- c("low" = "#6baed6", "mid" = "#9ecae1", "high" = "#2171b5")

# 绘制图形,同时结合之前的节点大小设置(可通过rescale调整节点大小范围)
plot(G.final,
     layout = layout_with_fr,
     vertex.color = color_map[V(G.final)$color_group],
     vertex.size = scales::rescale(V(G.final)$attribut.centrality, to = c(5, 20)), # 调整节点大小范围
     edge.color = "gray80", # 弱化边的颜色突出节点
     vertex.label.family = "Times",
     vertex.label.color = "black",
     vertex.label.cex = 0.8, # 调整标签大小
     edge.width = 0.8 # 调整边宽
)

# 添加图例
legend("bottomright",
       legend = c("小于第一四分位数", "介于第一-第三四分位数", "大于等于第三四分位数"),
       fill = color_map,
       cex = 0.7,
       title = "Barycenter Centrality"
)

说明

  1. 使用quantile()直接从指标值中提取四分位数,避免手动输入,保证准确性;
  2. cut()函数自动将指标值分到三个区间,生成分组变量;
  3. 配色选用了更专业的蓝色系(可替换为其他配色,比如c("low" = "#e41a1c", "mid" = "#ffff33", "high" = "#4daf4a"));
  4. 通过scales::rescale()统一节点大小的显示范围,避免过大或过小;
  5. 调整边的颜色、宽度和标签大小,提升整体美观度。

内容的提问来源于stack exchange,提问作者NA_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:30:52