【Python | Networks库详解】最佳实践(22年电工杯B题之路径可视化)

简介: 【Python | Networks库详解】最佳实践(22年电工杯B题之路径可视化)

👉引言💎


铭记于心
🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉


官方参考文档:


点击这里


👉networks?


networkx是Python的一个包,用于构建和操作复杂的图结构,提供分析图的算法。图是由顶点、边和可选的属性构成的数据结构,顶点表示数据,边是由两个顶点唯一确定的,表示两个顶点之间的关系。顶点和边也可以拥有更多的属性,以存储更多的信息。

对于networkx创建的无向图,允许一条边的两个顶点是相同的,即允许出现自循环,但是不允许两个顶点之间存在多条边,即出现平行边。边和顶点都可以有自定义的属性,属性称作边和顶点的数据,每一个属性都是一个Key:Value对。

一、将该表格中的数据以图的形式可视化

image.png

  • 首先导入所需要的包,以及上面信息表所在的路径
from matplotlib import pyplot as plt  # 绘图
import networkx as nx
import pandas as pd  # 读取exal文件
path=r'D:\date\python\study\saveLab\附件1.xlsx'

然后完成图的初始化,将表用pandas读取为DataFrame

将表格信息转换为一个字典,其中key为 边集,表示了边的信息,value为 距离集合,表示了对应的边的距离(权重weight)

再然后就是比较关键的一点,也是细节比较多的一点:

用draw方法绘制图像,这里面的参数信息要搞清楚

pos是以什么样的布局排图,一般有:

  • spectral_layout:根据图的拉普拉斯特征向量排列节点
  • circular_layout:节点在一个圆环上均匀分布
  • random_layout:节点随机分布
  • shell_layout:节点在同心圆上分布
  • spring_layout: 用Fruchterman-Reingold算法排列节点

这五种,然后指定颜色color,这里也可以用 颜色映射条(cmap),然后后面指定相应的映射参数(取多种颜色的话就是 放置一个list作为映射表),代码中使用的是 随机生成1,20范围的随机数 一共14次,因为一共14个点

plt.figure()
plt.subplot(111)
G = nx.Graph()  # 建立一个空的无向图G
DF = pd.read_excel(path)
DF.set_index(DF.columns[0], inplace=True)
DF.fillna(0, inplace=True)
ans = {}
for i in range(1, DF.shape[0] + 1):
    for j in range(1, DF.shape[1] + 1):
        t = (i, j)
        ans[t] = DF.loc[i, j]
for K in list(ans.keys()):
    if ans[K] == 0:
        ans.pop(K)
list(map(lambda e: G.add_edge(*e), list(ans.keys())))
pos = nx.spring_layout(G)
cm = plt.get_cmap('rainbow')
T=list(G.edges)
#fen
nx.draw_networkx_nodes(G, pos=pos, cmap=cm, node_color=[np.random.randint(1, 20) for _ in range(14)])
nx.draw_networkx_edges(G, pos=pos, edge_cmap=cm, edgelist=T,
                       edge_color=[np.random.randint(1, 10) for _ in range(24)])
nx.draw_networkx_labels(G, pos=pos)
# label_options = {"ec": "k", "fc": "white", "alpha": 0.5}
nx.draw_networkx_edge_labels(G, pos=pos, edge_labels=ans, rotate=0)
plt.show()  # 显示一个点Ea

可视化如下所示:

image.png

将一些结点以虚线相连,并且突出9号结点:

list(map(lambda e: G.add_edge(*e), list(ans.keys())))
---------------------------------以下为代码修改部分--------------------------
    E_list2 = [(1, 2), (3, 4), (3, 6), (4, 10), (7, 11), (8, 13), (12, 13)]
    # list(map(lambda X: DEL(X), E_list2))
    pos = nx.spring_layout(G)
    cm = plt.get_cmap('rainbow')
    T=list(G.edges)
    T2=list(G.nodes)
    T2.remove(9)
    nx.draw_networkx_nodes(G, pos=pos, cmap=cm, nodelist=T2, node_color=[np.random.randint(1, 20) for _ in range(13)])
    nx.draw_networkx_nodes(G, pos=pos, cmap=cm, nodelist=[9],node_color='black',node_size=1000,node_shape='*')
    nx.draw_networkx_edges(G, pos=pos, edge_cmap=cm, edgelist=T,
                           edge_color=[np.random.randint(1, 10) for _ in range(24)])
    nx.draw_networkx_edges(G, pos=pos, edge_color='black', edgelist=E_list2, style='--')
    nx.draw_networkx_labels(G, pos=pos)
    nx.draw_networkx_labels(G, pos=pos,labels={9:'9'},font_color='white') #设置表
    nx.draw_networkx_edge_labels(G, pos=pos, edge_labels=ans, rotate=0)
    plt.show()  # 显示一个点Ea
    time-=

这些主要是基于上面的代码做一些修改

image.png

💖写在最后💖

路漫漫其修远兮,吾将上下而求索!伙伴们,明天见!

相关文章
|
5天前
|
监控 搜索推荐 UED
用Python的pynput库追踪每一次点击和滚动
使用Python的`pynput`库可监听鼠标活动,包括点击和滚动事件。安装`pynput`后,通过`mouse.Listener`捕获鼠标事件。示例代码展示如何记录点击位置、滚动方向,并创建日志文件。通过类封装,可控制记录器的启停,并实现特定模式下的响应,如快速三连击左键自动打开网站。动手实践,将理论转化为实用工具。
|
5天前
|
XML 数据格式 Python
Python模块导入包括:`import math`导入标准库
【6月更文挑战第23天】Python模块导入包括:`import math`导入标准库,`from math import sqrt`导入单个函数,`import numpy as np`给模块取别名,`from random import *`导入所有(不推荐),`import xml.etree.ElementTree as ET`导入子模块,`import_module('pandas')`按需导入,和使用相对路径如`from .module import func`处理项目结构。记得调整`sys.path`以包含自定义模块路径。
16 4
|
6天前
|
数据采集 机器学习/深度学习 数据可视化
利用Python和Pandas库构建高效的数据分析流程
在数据驱动的时代,数据分析已成为企业决策的关键环节。本文介绍如何利用Python编程语言及其强大的数据分析库Pandas,构建一套高效且可扩展的数据分析流程。与常规的数据分析流程不同,本文不仅涵盖数据加载、清洗、转换等基础步骤,还强调数据可视化、模型探索与评估等高级分析技巧,并通过实际案例展示如何在Python中实现这些步骤,为数据分析师提供一套完整的数据分析解决方案。
|
1天前
|
程序员 API 计算机视觉
技术经验解读:【python自动化】02.pywin32库自动操作键鼠(保姆级代码注释)
技术经验解读:【python自动化】02.pywin32库自动操作键鼠(保姆级代码注释)
|
1天前
|
Linux 编译器 C语言
Python的系统路径
Python的系统路径
5 0
|
1天前
|
Linux 数据处理 C语言
经验大分享:python3使用libpcap库进行抓包及数据处理
经验大分享:python3使用libpcap库进行抓包及数据处理
|
2天前
|
Linux 数据处理 C语言
经验大分享:python3使用libpcap库进行抓包及数据处理
经验大分享:python3使用libpcap库进行抓包及数据处理
10 0
|
2天前
|
Python
python re 正则表达式库的使用
python re 正则表达式库的使用
4 0
|
3天前
|
前端开发 JavaScript PHP
顶级Python库(附代码)大分享
顶级Python库(附代码)大分享
|
3天前
|
Python
python之数值计算、math库、随机数
python之数值计算、math库、随机数
8 0

热门文章

最新文章