前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >networkx之图遍历和图绘制

networkx之图遍历和图绘制

作者头像
全栈程序员站长
发布2022-08-25 08:53:11
1.8K0
发布2022-08-25 08:53:11
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

networkx之图遍历和图绘制

文章目录

图数据读取后默认标签(labels)为索引,如何使用编号id?

例如在读取football数据时,其labels都是节点的英文名称,这样在处理图数据时不是很方便,往往报错,我们通常习惯处理节点的编号从1开始,可以建立label-id的反向索引,如果处理图数据时只需要编号id,可以将labels属性设置为id,如果之后还需要查询,可返回反向索引字典

处理函数如下:

代码语言:javascript
复制
def swap_id_label(G):
    """ 建立id和label的反向索引 return: new_graph :rtype: object """
    nodes = []
    edges = []
    nodes_id = dict()
    nodes_label = dict()
    for id, label in enumerate(G.nodes()):
        nodes_id[label] = id + 1
        nodes_label[id + 1] = label
        nodes.append(id + 1)
    for (u, v) in G.edges():
        edges.append((nodes_id[u], nodes_id[v]))
    new_graph = nx.Graph()
    new_graph.add_nodes_from(nodes)
    for node in nodes:
        new_graph.add_node(node, labels = node)
    new_graph.add_edges_from(edges)
    return new_graph

参考博客:【Python】networkx读取gml图文件,有两个问题影响使用


图数据读取后,如何得到节点集和边集?

在图数据读取后,我们在算法中处理数据时往往会对图的节点集和边集进行处理,下面提供几种遍历方式:


如何绘制多样的图?

在绘制图时,有时我们可能需要为节点着不同的颜色,展示不同属性和大小等等,需要为边添加不同的线型,颜色、粗细等等,这时需要分步绘制,其各类属性如下:

代码语言:javascript
复制
# 画点
draw_networkx_nodes(G, pos, nodelist=None, node_size=300, node_color='#1f78b4', node_shape='o', alpha=None,cmap=None, 
	vmin=None, vmax=None, ax=None, linewidths=None, edgecolors=None, label=None, **kwds)
# 画边
draw_networkx_edges(G, pos, edgelist=None, width=1.0, edge_color='k', style='solid', alpha=None, arrowstyle='-|>', arrowsize=10, 
	edge_cmap=None, edge_vmin=None, edge_vmax=None, ax=None, arrows=True, label=None, node_size=300, nodelist=None, 
	node_shape='o', connectionstyle=None, min_source_margin=0, min_target_margin=0, **kwds)
# 标签
draw_networkx_labels(G, pos, labels=None, font_size=12, font_color='k', font_family='sans-serif', font_weight='normal', 
	alpha=None, bbox=None, ax=None, **kwds)
# 边的标签 
draw_networkx_edge_labels(G, pos, edge_labels=None, label_pos=0.5, font_size=10, font_color='k', font_family='sans-serif', 
	font_weight='normal', alpha=None, bbox=None, ax=None, rotate=True, **kwds)

属性参考博客链接:networkx —— 基本操作及画图

🎈

下面以karate_club数据集为例绘制图:

代码语言:javascript
复制
import networkx as nx
import matplotlib.pyplot as plt

G = nx.karate_club_graph()

pos = nx.spring_layout(G) # 节点的布局为spring型
plt.figure(figsize = (6, 6)) # 图片大小

nodes = list(G.nodes())
vn = len(nodes)
nodes1 = [nodes[i] for i in range(0, (int)(vn / 2))]
nodes2 = [nodes[i] for i in range((int)(vn / 2), vn)]
nx.draw_networkx_nodes(G, pos = pos, nodelist=nodes1, node_color='r', node_size=140)
nx.draw_networkx_nodes(G, pos = pos, nodelist=nodes2, node_color='y', node_size=80)

edges = list(G.edges())
en = len(edges)
edges1 = [edges[i] for i in range(0, (int)(en / 2))]
edges2 = [edges[i] for i in range((int)(vn / 2), en)]
nx.draw_networkx_edges(G, pos = pos, edgelist=edges1, style='dashed', edge_color='g', width=1.0 , alpha='0.6')
nx.draw_networkx_edges(G, pos = pos, edgelist=edges2, style='dashed', edge_color='b', width=1.0 )

plt.show()

绘制结果如下

在这里插入图片描述
在这里插入图片描述

详细networkx使用见官网https://networkx.org/ 官方文档已上传至资源☞☞☞传送门networkx.pdf

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141886.html原文链接:https://javaforall.c

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月9,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • networkx之图遍历和图绘制
    • 文章目录
      • 图数据读取后默认标签(labels)为索引,如何使用编号id?
        • 图数据读取后,如何得到节点集和边集?
          • 如何绘制多样的图?
          相关产品与服务
          图数据库 KonisGraph
          图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档