Python中NetworkX库怎样用,如何实现绘图
Admin 2022-09-01 群英技术资讯 916 次浏览
这篇文章主要介绍“Python中NetworkX库怎样用,如何实现绘图”,有一些人在Python中NetworkX库怎样用,如何实现绘图的问题上存在疑惑,接下来小编就给大家来介绍一下相关的内容,希望对大家解答有帮助,有这个方面学习需要的朋友就继续往下看吧。最经典的随机图当属我们在上一篇博客《Erdos-Renyi随机图的生成方式及其特性》中讲到的Erdős-Rény随机图了,我们这里选用其中的Gnp????np形式,调用以下API:
G = nx.erdos_renyi_graph(10, 0.3, seed=1)
这里表示生成10个顶点的图,且图的每条边都以0.3的概率产生。
当然,此时生成的图不具有权重,我们想在此基础上均匀随机初始化[0, 0.4]之间的权重,可以这样写:
G = nx.Graph()
for u, v in nx.erdos_renyi_graph(10, 0.3, seed=1).edges():
G.add_edge(u, v, weight=random.uniform(0, 0.4))
随机图生成好之后,我们就要对其进行可视化了。首先我们需要计算每个节点在图中摆放的位置,经典的Fruchterman-Reingold force-directed 算法可以完成这个操作,对应NetworkX中的spring_layout函数:
pos = nx.spring_layout(G, iterations=20) #我们设算法迭代次数为20次
然后就可以分别绘制图的边、节点和节点标签了:
nx.draw_networkx_edges(G, pos, edge_color="orange") nx.draw_networkx_nodes(G, pos, node_color="black") nx.draw_networkx_labels(G, pos, font_color="white") plt.show()
绘图结果如下:

当然,这样图的权值是无法体现于图上的,如果我们需要图的权值体现于图上,可以使图中边的宽度按照权值大小来设置:
nx.draw_networkx_edges(G,pos, width=[float(d['weight']*10) for (u,v,d) in G.edges(data=True)], edge_color="orange") nx.draw_networkx_nodes(G,pos, node_color="black") nx.draw_networkx_labels(G, pos, font_color="white") plt.show()
此时的绘图结果如下:

如果你觉得2D布局过于扁平,还不够直观地体现节点之间的拓扑关系,那你可以采用如下的代码对图进行三维可视化:
# 3d spring layout
pos = nx.spring_layout(G, dim=3, seed=779)
# Extract node and edge positions from the layout
node_xyz = np.array([pos[v] for v in sorted(G)])
edge_xyz = np.array([(pos[u], pos[v]) for u, v in G.edges()])
# Create the 3D figure
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
# Plot the nodes - alpha is scaled by "depth" automatically
ax.scatter(*node_xyz.T, s=100, ec="w")
# Plot the edges
for vizedge in edge_xyz:
ax.plot(*vizedge.T, color="tab:gray")
def _format_axes(ax):
"""Visualization options for the 3D axes."""
# Turn gridlines off
ax.grid(False)
# Suppress tick labels
for dim in (ax.xaxis, ax.yaxis, ax.zaxis):
dim.set_ticks([])
# Set axes labels
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("z")
_format_axes(ax)
fig.tight_layout()
plt.show()
此时的绘图结果如下:

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
匿名函数就是不需要显式的指定函数名,这篇文章给大家介绍的就是关于python匿名函数的内容,下文会详细介绍python匿名函数的定义、语法、使用场景、使用形式等等,对大家学习和理解python匿名函数有一定的帮助,感兴趣的朋友可以了解了解。
所谓魔法函数(Magic Methods),是Python的⼀种⾼级语法,允许你在类中⾃定义函数(函数名格式⼀般为__xx__),并绑定到类的特殊⽅法中。⽐如在类A中⾃定义__str__()函数,则在调⽤str(A())时,会⾃动调⽤__str__()函数,并返回相应的结果
这篇文章主要介绍了解决tensorflow 与keras 混用之坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
类(class)抽象的概念,比如说人类、鸟类、水果、是一个总的称呼,没有具体到某个物体;对象(object,指具体实例,instance);
这篇文章主要为大家介绍了python密码学黑客攻击RSA密码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008