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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:30:56