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

如何使用Python或R模块可视化图中的自定义重叠社区?

重叠社区可视化方案(Python实现)

针对重叠社区的可视化,核心思路是用半透明的社区区域色块替代单一节点着色——让每个社区对应一个带透明度的凸包区域,重叠节点所在的社区区域会自然叠加,直观体现节点的多重社区归属。以下是基于networkx和matplotlib的实现代码,完全支持自定义社区输入:

import networkx as nx
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
from scipy.spatial import ConvexHull
import numpy as np

# 示例数据
list_nodes = ['A', 'B', 'C', 'D','E','F','G','H','I','J']
tuple_edges = [('A','B'),('A','C'),('A','D'),('B','C'),('B','D'), ('C','D'),('C','E'),
              ('E','F'),('E','G'),('F','G'),('G','H'),
              ('G','I'), ('G','J'),('H','I'),('H','J'),('I','J'),]
list_communities = [['A', 'B', 'C', 'D'],['E','F','G'],['G', 'H','I','J']]

# 构建图并计算节点布局
G = nx.Graph()
G.add_nodes_from(list_nodes)
G.add_edges_from(tuple_edges)
pos = nx.spring_layout(G, seed=42)  # 固定seed保证布局稳定

# 定义绘制社区凸包的函数
def draw_community_hull(community_nodes, color, alpha=0.3):
    # 获取社区内所有节点的坐标
    coords = np.array([pos[node] for node in community_nodes])
    # 计算凸包
    hull = ConvexHull(coords)
    # 生成凸包多边形的顶点坐标
    hull_points = coords[hull.vertices]
    # 创建多边形patch并添加到轴上
    patch = Polygon(hull_points, facecolor=color, alpha=alpha, edgecolor=color, linewidth=1.5)
    plt.gca().add_patch(patch)

# 设置画布
plt.figure(figsize=(10, 8))

# 绘制社区区域(先画区域,再画节点和边,避免被遮挡)
community_colors = ['#ff9999', '#99ccff', '#99ff99']  # 每个社区对应一种颜色
for idx, comm in enumerate(list_communities):
    draw_community_hull(comm, community_colors[idx])

# 绘制边
nx.draw_networkx_edges(G, pos, edge_color='gray', alpha=0.6)

# 区分重叠节点和非重叠节点
overlap_nodes = set()
node_comm_count = {node:0 for node in list_nodes}
for comm in list_communities:
    for node in comm:
        node_comm_count[node] +=1
for node, cnt in node_comm_count.items():
    if cnt >1:
        overlap_nodes.add(node)

# 绘制非重叠节点
non_overlap_nodes = [n for n in list_nodes if n not in overlap_nodes]
nx.draw_networkx_nodes(G, pos, nodelist=non_overlap_nodes, node_size=800, 
                       node_color='white', edgecolors='black')

# 绘制重叠节点(用特殊样式标记,比如深色填充+粗边框)
nx.draw_networkx_nodes(G, pos, nodelist=overlap_nodes, node_size=800, 
                       node_color='#333333', edgecolors='gold', linewidths=2)

# 绘制节点标签
nx.draw_networkx_labels(G, pos, font_size=12, font_weight='bold')

# 隐藏坐标轴
plt.axis('off')
plt.title('重叠社区可视化', fontsize=14)
plt.tight_layout()
plt.show()

关键实现说明

  • 社区区域绘制:通过ConvexHull计算社区节点的凸包,生成包围整个社区的多边形,设置alpha=0.3的半透明效果,多个社区重叠区域会呈现颜色叠加效果(比如节点G所在的两个社区区域叠加后会是蓝绿色)。
  • 重叠节点标记:统计每个节点所属的社区数量,对多社区节点用深色填充+金色粗边框突出,明确区分其重叠属性。
  • 布局稳定性:设置spring_layout的seed参数,保证每次运行的节点位置一致,便于对比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:20:19