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

网络分析:如何为ggraph绘制的社交网络节点及社群添加标签?

问题原因

你当前的代码仅给介数中心性betweenness_c大于等于0.06的节点生成了标签,其余节点的node_label被赋值为空字符串,因此只会显示两个符合阈值的核心节点标签。

可调整的实现方案

方案1:降低介数阈值,展示更多高重要性节点标签

调低betweenness_c的判定阈值,平衡标签密度和可读性:

plot <- network %>% 
  filter(community %in% 1:3) %>% 
  mutate(node_size = ifelse(degree_c >= 20,degree_c,0.06)) %>% 
  # 把介数阈值从0.06调低到0.02,可根据实际显示效果灵活调整
  mutate(node_label = ifelse(betweenness_c >= 0.02,name,"")) %>%  
  ggraph(layout = "stress") +
  geom_edge_fan(alpha = 0.05) +
  geom_node_point(aes(color = as.factor(community),size = node_size)) +
  geom_node_label(aes(label = node_label),repel = T,
                  # 缩小标签字号容纳更多标签
                  size = 2.5,
                  show.legend = F, fontface = "bold", label.size = 0.1,
                  segment.colour="slateblue", fill = "#ffffff66",
                  # 调整repel最大迭代次数,避免标签重叠被隐藏
                  max.overlaps = 50) +
  coord_fixed() +
  theme_graph() + 
  theme(legend.position = "none") +
  labs(title = "network analysis")

print(plot)

方案2:按社群展示Top N关键节点标签

如果希望每个社群都均匀展示若干核心节点,可按社群分组后取度数/介数排名靠前的节点显示标签:

plot <- network %>% 
  filter(community %in% 1:3) %>% 
  mutate(node_size = ifelse(degree_c >= 20,degree_c,0.06)) %>% 
  # 按社群分组,取每个社群介数排名前5的节点显示标签,数量可自定义
  group_by(community) %>%
  mutate(node_label = ifelse(rank(-betweenness_c) <=5,name,"")) %>%
  ungroup() %>%
  ggraph(layout = "stress") +
  geom_edge_fan(alpha = 0.05) +
  geom_node_point(aes(color = as.factor(community),size = node_size)) +
  geom_node_label(aes(label = node_label),repel = T,
                  size = 2.5,
                  show.legend = F, fontface = "bold", label.size = 0.1,
                  segment.colour="slateblue", fill = "#ffffff66",
                  max.overlaps = 100) +
  coord_fixed() +
  theme_graph() + 
  theme(legend.position = "none") +
  labs(title = "network analysis")

print(plot)

可选优化建议

  • 如果调整后标签依然拥挤,可导出更大尺寸的高清图,比如用ggsave("network.png", plot, width = 20, height = 20, dpi = 300)导出,大图能容纳更多不重叠的标签
  • 若不需要区分节点重要性直接展示所有节点标签,直接把node_label赋值为name即可,但节点数量较多时会出现严重重叠,不推荐使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:54:05