基于指定数据框绘制带聚类效果的关联网络图技术问询
R语言绘制带聚类的关联网络图
步骤1:加载依赖包
确保安装并加载igraph包(绘制网络图的核心工具):
# 首次运行需安装包 install.packages("igraph") # 加载包 library(igraph)
步骤2:构建图对象
将数据框转换为igraph图结构,把value设为边的权重(值越高,节点关联越强,布局时会更靠近):
# 定义数据框 df <- data.frame(char1=c('a', 'd', 'i', 'k', 'm', 'd', 'e', 'e', 'q', 'i','q', 'm','n','i'), char2=c('b','a','a','g','n','b', 'o', 'g', 'p', 'b','g','b','k','d'), value=c(0.8,0.6,0.6,0.5,0.5,0.4,0.3,0.2,0.1,0.1,0.4,-0.1,-0.2,-0.3)) # 转换为无向图对象,设置边权重 graph <- graph_from_data_frame(df, directed = FALSE) E(graph)$weight <- df$value
步骤3:检测强关联聚类
用快速贪心算法识别节点的社区结构,自动划分强关联节点组:
# 执行社区检测(基于边权重) community <- fastgreedy.community(graph, weights = E(graph)$weight) # 为每个节点标记所属社区 V(graph)$community <- membership(community)
步骤4:绘制网络图
通过参数设置实现需求:
- 布局采用权重驱动的Fruchterman-Reingold算法,高关联节点自动靠近
- 节点颜色区分社区,直观展示聚类
- 边的粗细对应关联值大小
plot(community, graph, layout = layout_with_fr(graph, weights = E(graph)$weight), # 权重决定节点距离 edge.width = E(graph)$value * 5, # 关联值越高边越粗 vertex.size = 20, # 节点大小 vertex.label.cex = 1.2, # 标签字号 vertex.color = scales::hue_pal()(max(V(graph)$community)), # 社区颜色区分 edge.alpha = 0.7, # 边透明度 main = "关联网络图(强关联节点聚类展示)")
效果说明
- 高关联节点对(如a-b、a-d、d-b)会因权重高紧密聚集,形成明显聚类
- 不同颜色代表不同社区,清晰区分强关联分组
- 边的粗细直接反映关联值强弱,粗边对应高关联
内容的提问来源于stack exchange,提问作者user21390049
相关产品推荐
相关产品推荐

