在R中匹配网络图可视化样式:节点标签与虚线显示问题
完整实现方案:匹配目标网络图样式
以下是调整后的完整代码,可实现与目标样式一致的可视化效果:
library(dplyr) library(network) library(GGally) set.seed(123) # 生成边数据 edges <- data.frame( SOURCE = sample(1:30, 100, replace = TRUE), TARGET = sample(1:30, 100, replace = TRUE) ) %>% filter(SOURCE != TARGET) %>% mutate( min_node = pmin(SOURCE, TARGET), max_node = pmax(SOURCE, TARGET) ) %>% distinct(min_node, max_node) %>% transmute( SOURCE = min_node, TARGET = max_node ) # 生成节点属性数据 vertices <- data.frame( label = 1:30, group = sample(c("Group A", "Group B", "Group C", "Group D", "Group E"), 30, replace = TRUE) ) # 创建network对象 net <- network(edges, vertex.attr = vertices, directed = FALSE) # 确保节点组属性正确匹配 net %v% "group" <- vertices$group[match(network.vertex.names(net), vertices$label)] # 标记同组/异组边,并设置边属性 edge_attrs <- edges %>% left_join(vertices, by = c("SOURCE" = "label")) %>% rename(source_group = group) %>% left_join(vertices, by = c("TARGET" = "label")) %>% rename(target_group = group) %>% mutate( same_group = source_group == target_group, # 同组边使用源节点组的颜色,异组边标记为跨组 edge_color = ifelse(same_group, source_group, "Inter-group"), # 同组边实线,异组边虚线 edge_lty = ifelse(same_group, 1, 2) ) # 给network对象添加边属性 set.edge.attribute(net, "edge_color", edge_attrs$edge_color) set.edge.attribute(net, "edge_lty", edge_attrs$edge_lty) # 绘制网络图 network_plot <- ggnet2(net, mode = "fruchtermanreingold", layout.par = list(cell.jitter = 0.75), # 节点颜色按分组设置 node.color = "group", palette = "Paired", # 节点大小与标签适配 node.size = 8, node.alpha = 0.8, # 节点添加黑色边框增强辨识度 node.border.color = "black", # 边颜色映射:同组边用对应组颜色,异组边灰色 edge.color = "edge_color", edge.palette = c("Paired", "grey50"), edge.alpha = 0.6, edge.size = 0.4, # 绑定边线型属性 edge.lty = "edge_lty", # 节点标签设置 node.label = TRUE, node.label.color = "black", node.label.size = 2.8, # 图例设置 color.legend = "Group", edge.color.legend = "Edge Type", legend.size = 10 ) + theme_minimal() + theme(legend.position = "right") print(network_plot)
关键调整说明
- 边样式修复:改用
dplyr批量处理边属性,避免循环赋值的错误,确保同组边为实线、异组边为虚线的设置正确绑定到network对象 - 边颜色匹配:让同组边颜色与对应节点组的颜色一致,异组边统一为灰色,通过
edge.palette指定颜色映射规则 - 节点细节优化:添加节点黑色边框,调整节点大小、透明度与标签大小的适配性,提升视觉层次感
- 图例完善:新增边类型图例,明确区分同组/异组边,优化图例位置与显示大小
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

