代码

方法一

根据networkx的文档: https://networkx.github.io/documentation/networkx-1.10/reference/generated/networkx.drawing.nx_pylab.draw_networkx.html

我们可以写出来一个非常简单的例子,如下(代码可以左右滑动):

import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
edge_index = [(1, 2), (1, 3), (2, 3), (3, 4)]
G.add_edges_from(edge_index)
nx.draw(G)
plt.show()

运行程序之后,可以得到下面的图,(偷了一个懒,没有加label之类的信息)

这个例子给我们的启发:我们可以将PyG得到的edge_index转成numpy的格式,然后传给nx,下面是根据这个写的一个函数:
在PyG中,边的表示放在了edge_index中,由一个二维的矩阵构成,edge_index[0]表示节点edge_index[1]表示另一个节点

def draw(edge_index, name=None):G = nx.Graph(node_size=15, font_size=8)src = edge_index[0].cpu().numpy()dst = edge_index[1].cpu().numpy()edgelist = zip(src, dst)for i, j in edgelist:G.add_edge(i, j)plt.figure(figsize=(20, 14)) # 设置画布的大小nx.draw_networkx(G)plt.savefig('{}.png'.format(name if name else'path'))

注:该方法可以用于模型中的forward函数,用于分析cov,pool等操作

再写一个与上面思想一致,可以直接运行的一个例子

from torch_geometric.datasets import KarateClub
import networkx as nx
import matplotlib.pyplot as plt
dataset = KarateClub()
edge, x, y = dataset[0]
# edge, x, y 每个维度都为2,其中第一维度是name,第二个维度是data
# x表示的是结点,y表示的标签,edge表示的连边, 由两个维度的tensor构成
x_np = x[1].numpy()
y_np = y[1].numpy()
g = nx.Graph()
name, edgeinfo = edge
src = edgeinfo[0].numpy()
dst = edgeinfo[1].numpy()
edgelist = zip(src, dst)
for i, j in edgelist:g.add_edge(i, j)
nx.draw(g)
plt.savefig('test.png')
plt.show()

方法二

其实,torch_geometric.utils中已经带有to_networkx的函数可以直接将格式为torch_geometric.data.Data 的数据转换为networkx.DiGraph的格式,该格式可以直接networkx处理,但是我们提前要得到torch_geometric.data.Data的数据格式

import networkx as nx
from torch_geometric.utils.convert import to_networkx
def draw(Data):G = to_networkx(Data)nx.draw(G)plt.savefig("path.png")plt.show()

注:上面这个一般可以用于在model训练加载数据之前数据的分析,比如下面的例子

for i, data in enumerate(train_loader):draw(data)data = data.to(args.device)out = model(data)loss = F.nll_loss(out, data.y)print("Training loss:{}".format(loss.item()))loss.backward()optimizer.step()optimizer.zero_grad()

上面的函数是在graph classification进行分析的一段代码,可以把batch size的设置为1,那么for循环中得到就是一个graph的数据,在把数据feed给模型之前,我们可以通过该方法分析一下原始的数据是什么样子的。

参考

pyg手册

nx画图手册

PyG-使用networkx对Graph进行可视化相关推荐

  1. PyG ENZYMES蛋白质分子图数据集可视化教程

    ENZYMES数据集是在GNN领域是非常经典的数据集,它是一个根据生物分子蛋白质结构而构建的Graph数据集合,总共600个图,也就是对应600个样本(蛋白质分子) ,共有六种结构 这个数据集是一个用 ...

  2. networkx关于Graph的各种操作

    networkx关于Graph的各种操作 Graph DiGraph MultiGraph https://blog.csdn.net/moodytong/article/details/749152 ...

  3. 【Pytorch神经网络理论篇】 27 图神经网络DGL库:简介+安装+卸载+数据集+PYG库+NetWorkx库

    DGL库是由纽约大学和亚马逊联手推出的图神经网络框架,支持对异构图的处理,开源相关异构图神经网络的代码,在GCMC.RGCN等业内知名的模型实现上也取得了很好的效果. 1 DGL库 1.1 DGL库的 ...

  4. 【零代码工具推荐】Max Creation Graph (MCG) 可视化图形编程工具

    从3dMax 2016开始新加入了一个很牛great的功能,也就是"MCG"全称是Max Creation Graph,MCG可以让用户使用全可视化节点工作流程来创建修改器,几何体 ...

  5. python使用Networkx生成人物关系可视化详解

    一,先说实现的思路 1,将文本中出现的重要人物名字放入列表中:也可以使用自然语言处理工具将词性标记为'nr'的词语放入列表中,但一则费时费力二则准确性太差.所以,简单粗暴但高效的做法是直接从搜索引擎中 ...

  6. 为什么要进行图学习?谈一谈逆势而上的图神经网络

    点击上方 蓝字关注我们 问一问近几年来逆势而上的技术有什么?相信你一定会说出来一个:图神经网络. 图神经网络将会在人工智能的各个领域起着非常重要的作用,虽然目前还没有完全成为各大顶会的焦点,但不可否认 ...

  7. PyG Cora图数据集可视化教程

    Cora数据集是在GNN领域是非常经典的数据集,它是一个根据科学论文之间相互引用关系而构建的Graph数据集合,论文分为 7类,共2708篇. Genetic_Algorithms Neural_Ne ...

  8. 技术实践 | 用 NetworkX + Gephi + Nebula Graph 分析权力的游戏人物关系(上篇)

    本文转载自公众号:Nebula Graph Community . 我们都知道<权利的游戏>在全世界都很多忠实的粉丝,除去你永远不知道剧情下一秒谁会挂这种意外"惊喜", ...

  9. gephi生成网络关系图_用 NetworkX + Gephi + Nebula Graph 分析lt;权力的游戏gt;人物关系(上)

    我们都知道<权利的游戏>在全世界都很多忠实的粉丝,除去你永远不知道剧情下一秒谁会挂这种意外"惊喜",当中复杂交错的人物关系也是它火爆的原因之一,而本文介绍如何通过 Ne ...

最新文章

  1. NeurIPS 2020 大变动,领域主席可拒稿20%,作者即评审,布局远程会议!
  2. Redis缓存击穿和缓存雪崩、缓存穿透以及对应的解决方案
  3. 12123选牌漏洞_12123选牌漏洞是什么?新车牌号自编自选技巧
  4. 环境变量PATH、mv命令、cp命令、文档查看命令(cat、more、less、head、tail)
  5. abnf java实现_详细讲解如何利用Java实现组合式解析器?
  6. Flask框架Flask-Login用法分析
  7. c_str()的用法
  8. label y 训练集测试集x_训练集、测试集 train_test_split
  9. argparse 部分参数整理
  10. 微信小程序反编译解包教程
  11. matlab线性同余发生器,用MATLAB进行随机数模拟--线性同余法
  12. 台电X80H平板安装ubantu
  13. Uniapp 微信小程序登陆页面
  14. 3dmax无法选中对象怎么办
  15. W11系统VMware网卡vmnet8显示未识别的网络
  16. ArrayList集合实现RandomAccess接口有何作用?为何LinkedList集合却没实现这接口?
  17. yocto源码下载和目录分析
  18. 物料需求规划(MRP)(ERP的工作原理3)------(转)
  19. 低代码开发平台如何支撑微服务/云原生架构
  20. Java中矩阵运算Array2DRowRealMatrix(math3的使用)

热门文章

  1. failed to read artifact descriptor for *** 问题解决心得
  2. mysql command为sleep时项目可以连接_mysql数据库常连接造成大量sleep状态怎么办
  3. SRM管理系统是什么?能为企业带来什么效益
  4. 大数据时代之大数据搜索与挖掘
  5. 银行科技岗是程序员比较好的就业选择么?
  6. 卓岚联网模块连接三菱FX系列PLC应用实例
  7. 下载youtube 在线工具_9个无需下载的免费在线工具,都是你工作中经常用得到的!...
  8. 通过commons-email-1.5简单实现邮件发送
  9. 个人博客Controller-home之ArticleController
  10. API、JSON等知识的初步学习,以及关于Quake Report应用的总结,以后开发可以用到的一些技能