
©[悠悠智汇笔记] 版权所有
🙏请尊重劳动成果,守护每一份劳动心血;⚖️未经授权,不得以为任何方式转载、摘编或抄袭。🔄转载合作请后台联系授权,侵权必究。

01

全局配置

导入处理网络拓扑(NetworkX)、科学计算(NumPy)和数据处理(Pandas)的核心库,并初始化绘图系统的视觉参数。
import matplotlib.pyplot as pltimport numpy as npimport pandas as pdimport networkx as nxfrom matplotlib.patches import Patch# 设置全局字体和基础样式plt.rcParams['font.family'] = 'Times New Roman'02

颜色配置

定义不同样本(Source)对应的颜色映射。
# 样本配色字典:用于边颜色custom_color_map = { "SampleA": "#b0d1a6", "SampleB": "#f5c5a0", "SampleC": "#e7a39a", "SampleD": "#b1a5c9", "SampleE": "#a0d8ef"}# 标签配色字典:用于节点文字颜色sample_label_color_map = { "SampleA": "#4f7942", "SampleB": "#c65f0a", "SampleC": "#a03530", "SampleD": "#5e4c8c", "SampleE": "#20648a"}03

环形几何布局计算

利用极坐标系理论,将中心节点(样本)均匀映射到圆周上。
def generate_circular_pos(nodes, radius=0.5): pos = {} n_nodes = len(nodes) for i, node in enumerate(nodes): theta = 2.0 * np.pi * i / n_nodes pos[node] = np.array([radius * np.cos(theta), radius * np.sin(theta)]) return pos04

构建NetworkX图拓扑

确定“样本-元素”之间的逻辑连接,并将颜色属性注入到每一根边(Edge)中。
def create_graph_model(df): # 构建无向图模型 G = nx.from_pandas_edgelist( df, source='source', target='target', edge_attr=['color'], create_using=nx.Graph() ) return G05

可视化

将计算好的坐标和拓扑结构进行渲染。在调用力导向布局(Spring Layout)时,引入初始坐标作为种子,并配置线条的弯曲弧度、节点大小以及图例信息。
def main(file_path): # 1. 加载数据 try: df = pd.read_csv(file_path) except: return print("Error: File not found.") # 2. 建立图模型与初始位置 G = create_graph_model(df) source_nodes = df['source'].unique() initial_pos = generate_circular_pos(source_nodes) # 3. 布局优化 pos = nx.spring_layout(G, pos=initial_pos, k=0.1, iterations=100) # 4. 执行绘图 fig, ax = plt.subplots(figsize=(8, 8)) # 提取边颜色并绘制弧线 edge_colors = [d.get('color', 'gray') for _, _, d in G.edges(data=True)] nx.draw_networkx_edges(G, pos, edge_color=edge_colors, alpha=0.5, connectionstyle="arc3,rad=0.3", ax=ax) # 绘制基础节点 nx.draw_networkx_nodes(G, pos, node_size=30, node_color='lightgray', ax=ax) # 绘制标签 nx.draw_networkx_labels(G, pos, font_size=8, ax=ax) # 5. 图例美化 legend_elements = [Patch(facecolor=c, label=l) for l, c in custom_color_map.items()] ax.legend(handles=legend_elements, loc='best', frameon=False) ax.set_axis_off() plt.show()🌿 今日的分享就到这里啦~如果这些内容有为你带来帮助,欢迎轻点右下角的【👍赞】和【👀在看】,也欢迎分享给更多需要的人,感恩~
THE
END


数据和代码怎么获取?
点击关注后,后台回复关键词:
2026_map_010可直接获取完整的示例数据和代码
如有帮助,您的点赞、评论、转发是我持续创作的动力~

