本文主要是介绍python中判断无向图是否有环_硬核教程,利用 Python 搞定精美网络图!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
硬核教程,利用 Python 搞定精美网络图!
一、NetworkX 概述
NetworkX 是一个用 Python 语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。Networkx 支持创建简单无向图、有向图和多重图;内置许多标准的图论算法,节点可为任意数据;支持任意的边值维度,功能丰富。主要用于创造、操作复杂网络,以及学习复杂网络的结构、动力学及其功能。用于分析网络结构,建立网络模型,设计新的网络算法,绘制网络等等。
PS:本文所使用的数据源以及代码文件,可以在文末获取
二、NetworkX 的安装
pip install networkx -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
三、NetworkX 基础知识
1. 创建图
可以利用 networkx 创建四种图: Graph 、DiGraph、MultiGraph、MultiDiGraph,分别为无多重边无向图、无多重边有向图、有多重边无向图、有多重边有向图。
import network as nx
G = nx.Graph()
G = nx.DiGraph()
G = nx.MultiGraph()
G = nx.MultiDiGraph()
2. 网络图的加点和加边
import networkx as nx
import matplotlib.pyplot as plt
G = nx.DiGraph()
G.add_node('z') # 添加节点z
G.add_nodes_from([1, 2, 3]) # 添加节点 1 2 3
G.add_edge('x', 'y') # 添加边 起点为x 终点为y
G.add_edges_from([(1, 2), (1, 3), (2, 3)]) # 添加多条边
# 网络图绘制与显示
nx.draw(G, with_labels=True)
plt.show()
运行效果如下:
为了让网络图更美观可以调节 nx.draw()
方法里的参数
nx.draw(G, pos=nx.random_layout(G), node_color = 'b', edge_color = 'r', with_labels = True, font_size =18, node_size =20)
- G:待绘制的网络图G
- node_size:指定节点的尺寸大小(默认是300)
- node_color: 指定节点的颜色 (可以用字符串简单标识颜色,例如'r'为红色,'g'为绿色这样)
- node_shape: 节点的形状(默认是圆形,用字符串'o'标识)
- alpha: 透明度 (默认是1.0,不透明,0为完全透明)
- width: 边的宽度 (默认为1.0)
- edge_color: 边的颜色(默认为黑色)
- style: 边的样式(默认为实现,可选: solid | dashed | dotted | dashdot
- with_labels:节点是否带标签
- font_size: 节点标签字体大小
- font_color: 节点标签字体颜色(默认为黑色)
3. 运用布局
circular_layout:节点在一个圆环上均匀分布 random_layout:节点随机分布 shell_layout:节点在同心圆上分布 spring_layout:用 Fruchterman-Reingold 算法排列节点(样子类似多中心放射状) spectral_layout:根据图的拉普拉斯特征向量排列节点绘制网络图实例如下:
import networkx as nx
import matplotlib.pyplot as plt
# 初始化一个有向图对象
D
这篇关于python中判断无向图是否有环_硬核教程,利用 Python 搞定精美网络图!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!