python networkx图可视化 基础知识以及解决遇到的问题

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


 一、基础知识

1.1 创建图

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()

 1.2  网络图的加点和加边

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)])

1.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: 节点标签字体颜色(默认为黑色)

1.4 运用布局

这里面影响节点布局的核心代码是:

  • circular_layout:节点在一个圆环上均匀分布
  • random_layout:节点随机分布
  • shell_layout:节点在同心圆上分布
  • spring_layout:用 Fruchterman-Reingold 算法排列节点(样子类似多中心放射状)
  • spectral_layout:根据图的拉普拉斯特征向量排列节点
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路径长度代价函数生成布局

 

二、解决遇到的问题

2.1 解决:ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接。

报错:使用networkx画图时,报错了,

问题

  plt.rcParams['figure.figsize'] = (100, 80)  # 设置画布大小

解决:就是这一句出的问题,现在改成小一点的就对了,之前是画布大小设置的太大,所以报错了,虽然不知道啥原因,不过如果你遇见的话可以试着把这个调小一些,也许就ok了。

 运行代码,成功输出的结果如下图所示,

OK,问题解决了。

2.2 解决urllib.error.HTTPError: HTTP Error 500: Internal Server Error

报错

问题:这应该是服务器的问题。 内部错误--由于意外情况,服务器无法完成请求。

解决:代码是没有问题的,要不然就会报错。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值