【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

💖写在最后💖

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

相关文章
|
3天前
|
SQL 前端开发 数据可视化
Rodeo支持多种Python库
Rodeo支持多种Python库
11 5
|
2天前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
在网络数据的海洋中,网络爬虫遵循HTTP协议,穿梭于互联网各处,收集宝贵信息。本文将从零开始,使用Python的requests库,深入解析HTTP协议,助你构建自己的网络爬虫帝国。首先介绍HTTP协议基础,包括请求与响应结构;然后详细介绍requests库的安装与使用,演示如何发送GET和POST请求并处理响应;最后概述爬虫构建流程及挑战,帮助你逐步掌握核心技术,畅游数据海洋。
15 3
|
3天前
|
存储 并行计算 大数据
优化Python数据处理性能的最佳实践
在数据科学和大数据时代,优化Python数据处理性能变得至关重要。通过探讨数据处理瓶颈、内存管理、并行计算以及高效库的使用,本篇文章旨在提供切实可行的最佳实践,以帮助开发者提升数据处理效率。
|
7天前
|
数据采集 网络协议 API
HTTP协议大揭秘!Python requests库实战,让网络请求变得简单高效
【9月更文挑战第13天】在数字化时代,互联网成为信息传输的核心平台,HTTP协议作为基石,定义了客户端与服务器间的数据传输规则。直接处理HTTP请求复杂繁琐,但Python的`requests`库提供了一个简洁强大的接口,简化了这一过程。HTTP协议采用请求与响应模式,无状态且结构化设计,使其能灵活处理各种数据交换。
35 8
|
10天前
|
开发者 Python
基于Python的日志管理与最佳实践
日志是开发和调试过程中的重要工具,然而,如何高效地管理和利用日志常常被忽略。本文通过Python中的logging模块,探讨如何使用日志来进行调试、分析与问题排查,并提出了一些实际应用中的优化建议和最佳实践。
|
8天前
|
数据采集 传感器 数据可视化
利用Python进行数据分析与可视化
【9月更文挑战第11天】在数字化时代,数据已成为企业决策和科学研究的关键。本文将引导读者了解如何使用Python这一强大的工具进行数据分析和可视化,帮助初学者理解数据处理的流程,并掌握基本的可视化技术。通过实际案例,我们将展示如何从原始数据中提取信息,进行清洗、处理,最终以图形方式展现结果,使复杂的数据变得直观易懂。
|
11天前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【9月更文挑战第9天】随着互联网的发展,网络编程成为现代软件开发的关键部分。Python凭借简洁、易读及强大的特性,在该领域展现出独特魅力。本文介绍了Python标准库中的`urllib`和第三方库`requests`在处理HTTP请求方面的优势。`urllib`虽API底层但功能全面,适用于深入控制HTTP请求;而`requests`则以简洁的API和人性化设计著称,使HTTP请求变得简单高效。两者互补共存,共同推动Python网络编程进入全新纪元,无论初学者还是资深开发者都能从中受益。
29 7
|
18天前
|
机器学习/深度学习 PyTorch 算法框架/工具
python这些库和框架哪个更好
【9月更文挑战第2天】python这些库和框架哪个更好
32 6
|
18天前
|
机器学习/深度学习 数据采集 算法框架/工具
python有哪些常用的库和框架
【9月更文挑战第2天】python有哪些常用的库和框架
21 6
|
3月前
|
开发工具 git Python
安装和使用`libnum`是一个用于数字理论函数的Python库
【6月更文挑战第19天】`libnum`是Python的数字理论函数库。安装可通过`git clone`,进入目录后运行`python setup.py install`,也可用`pip install libnum`。示例:使用`int_to_hex`将十进制数42转换为十六进制字符串'2a'。注意,信息可能已过时,应查最新文档以确保准确性。如遇问题,参考GitHub仓库或寻求社区帮助。
74 1