NetworkX:绘制中心节点居中、源节点环形环绕的网络图
实现环形网络布局方案
我来帮你搞定这个环形布局的问题!结合networkx和matplotlib,我们可以完美实现你想要的效果,下面是具体的步骤和代码:
完整代码示例
import networkx as nx import matplotlib.pyplot as plt import math # 1. 构建你的网络 G = nx.Graph() center_node = "center" source_nodes = [f"s{i}" for i in range(1, 6)] # 示例5个source节点,可按需修改数量 # 添加节点和边 G.add_node(center_node) G.add_nodes_from(source_nodes) for s in source_nodes: G.add_edge(center_node, s) # 2. 设置布局参数 figsize = (8, 8) # 可自定义画布大小 radius = 3 # 半径与figsize成比例:figsize(8,8)配radius3,figsize(10,10)配radius4,以此类推 # 3. 计算节点位置 pos = {} # 中心节点固定在坐标原点(0,0) pos[center_node] = (0, 0) # 计算每个source节点的角度,确保均匀分布在圆周上 num_sources = len(source_nodes) angle_step = 2 * math.pi / num_sources # 每个节点间的角度差 for i, node in enumerate(source_nodes): angle = i * angle_step # 基于极坐标转笛卡尔坐标计算节点位置 x = radius * math.cos(angle) y = radius * math.sin(angle) pos[node] = (x, y) # 4. 绘图美化 plt.figure(figsize=figsize) # 绘制边:用淡灰色弱化视觉权重,突出中心节点 nx.draw_networkx_edges(G, pos, edge_color="#cccccc", width=2) # 绘制节点:中心节点放大、深色突出,source节点统一样式 nx.draw_networkx_nodes(G, pos, nodelist=[center_node], node_size=1500, node_color="#2c3e50") nx.draw_networkx_nodes(G, pos, nodelist=source_nodes, node_size=800, node_color="#3498db") # 绘制节点标签 nx.draw_networkx_labels(G, pos, font_size=12, font_weight="bold") # 隐藏坐标轴,让图更简洁美观 plt.axis("off") plt.tight_layout() plt.show()
关键细节说明
- 半径与figsize的比例适配:这里的半径是相对画布的坐标值,matplotlib默认坐标轴范围会随figsize变化。比如
figsize=(8,8)时,半径设为3能让节点刚好分布在画布中间区域;如果把figsize改成(10,10),可以把半径调到4,保持视觉上的平衡比例。 - 均匀圆周排列:通过
2π/节点数量计算每个source节点的角度差,确保它们整齐、均匀地环绕中心节点。 - 视觉层次优化:把中心节点设置得更大、颜色更深,边用淡灰色处理,能有效突出中心节点的核心地位,让整个图的结构更清晰。
你可以根据需求灵活调整节点数量、颜色、大小或者画布尺寸,这个方案完全适配你的场景!
内容的提问来源于stack exchange,提问作者Optimesh
相关产品推荐
相关产品推荐

