python 使用networkx绘制带权无向图和带权有向图,以及标注特定路径
需要了解的小伙伴,请移步到
python 使用networkx绘制带权无向图和带权有向图,以及标注特定路径_水w的博客-CSDN博客
目录
一、基础知识
1.1 创建图
1.2 网络图的加点和加边
1.3 网络图绘制与显示
1.4 运用布局
二、解决遇到的问题
2.1 解决:ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接。
2.2 解决urllib.error.HTTPError: HTTP Error 500: Internal Server Error
networkx有四种图 Graph 、DiGraph、MultiGraph、MultiDiGraph,分别为无多重边无向图、无多重边有向图、有多重边无向图、有多重边有向图。
import networkx as nx #载入networkx包
import matplotlib.pyplot as plt #用于画图
G = nx.Graph() #创建空的无向图
G = nx.DiGraph()
G = nx.MultiGraph()
G = nx.MultiDiGraph()
G.add_node('z') # 添加节点z
G.add_node(1,1) # 用坐标来添加点
G.add_nodes_from([1, 2, 3]) # 添加节点 1 2 3
G.add_edge('x', 'y') # 添加边 起点为x 终点为y
G.add_weight_edges_from([('x','y',1.0)]) # 第三个输入量为权值
G.add_edges_from([(1, 2), (1, 3), (2, 3)]) # 添加多条边
#也可以
list = [[('a','b',5.0),('b','c',3.0),('a','c',1.0)]
G.add_weight_edges_from([(list)])
删除节点,和加入点边操作类似,需要注意的是删除一个点时会删除与之连接的所有边。
# 删除节点,和加入点边操作类似,需要注意的是删除一个点时会删除与之连接的所有边。
G.remove_node(1)
G.remove_nodes_from([2,3])
G.remove_edge(5,6)
G.remove_edges_from([(7,8),(8,9)])
# 网络图绘制与显示
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
这里面影响节点布局的核心代码是:
pos=nx.circular_layout(G) # 生成圆形节点布局
pos=nx.random_layout(G) # 生成随机节点布局
pos=nx.shell_layout(G) # 生成同心圆节点布局
pos=nx.spring_layout(G) # 利用Fruchterman-Reingold force-directed算法生成节点布局
pos=nx.spectral_layout(G) # 利用图拉普拉斯特征向量生成节点布局
pos=nx.kamada_kawai_layout(G) #使用Kamada-Kawai路径长度代价函数生成布局
报错:使用networkx画图时,报错了,
问题:
plt.rcParams['figure.figsize'] = (100, 80) # 设置画布大小
解决:就是这一句出的问题,现在改成小一点的就对了,之前是画布大小设置的太大,所以报错了,虽然不知道啥原因,不过如果你遇见的话可以试着把这个调小一些,也许就ok了。
OK,问题解决了。
报错:
问题:这应该是服务器的问题。 内部错误--由于意外情况,服务器无法完成请求。
解决:代码是没有问题的,要不然就会报错。