NetworkX系列教程(8)-Drawing Graph
如果只是简单使用nx.draw,是无法定制出自己需要的graph,并且这样的graph内的点坐标的不定的,运行一次变一次,实际中一般是要求固定的位置,这就需要到布局的概念了.详细的画图信息可以看这里,代码中的关键部分使用了英文进行注释,不在另外注释.
目录:
注意:如果代码出现找不库,请返回第一个教程,把库文件导入.
9.Drawing Graph
9.1使用Matplotlib
- #定义graph
- nodes=[0,1,2,3,4,5,'a','b','c']
- edges=[(0,1),(0,5),(1,2),(1,4),(2,1),(2,4),('a','b'),('b','c'),('c','a')]
- G=nx.Graph()
- G.add_nodes_from(nodes)
- G.add_edges_from(edges)
- #使用spring_layout布局
- pos=nx.spring_layout(G)
- plt.subplots(2,4,figsize=(18,6))
- plt.subplot(241)
- plt.title('spring_layout')
- nx.draw(G, with_labels=True, font_weight='bold') #Draw the graph G with Matplotlib.
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.subplot(242)
- plt.title('draw_networkx')
- nx.draw_networkx(G) #Draw the graph G using Matplotlib.
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.subplot(243)
- plt.title('draw_networkx_nodes')
- nx.draw_networkx_nodes(G,pos) #Draw the nodes of the graph G.
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.subplot(244)
- plt.title('draw_networkx_edges')
- nx.draw_networkx_edges(G,pos) #Draw the edges of the graph G.
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.subplot(245)
- plt.title('draw_networkx_labels')
- nx.draw_networkx_labels(G,pos) #Draw node labels on the graph G.
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.subplot(246)
- plt.title('draw_networkx_edge_labels')
- nx.draw_networkx_edge_labels(G,pos) #Draw edge labels.
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.subplot(247)
- plt.title('draw_circular')
- nx.draw_circular(G,) #Draw the graph G with a circular layout.
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.subplot(248)
- plt.title('draw_kamada_kawai')
- nx.draw_kamada_kawai(G) #Draw the graph G with a Kamada-Kawai force-directed layout.
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.show()
- plt.close()
- plt.subplots(1,4,figsize=(18,3))
- plt.subplot(141)
- plt.title('draw_random')
- nx.draw_random(G) #Draw the graph G with a random layout.
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.subplot(142)
- plt.title('draw_spectral')
- nx.draw_spectral(G,) #Draw the graph G with a spectral layout.
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.subplot(143)
- plt.title('draw_spring')
- nx.draw_spring(G) #Draw the graph G with a spring layout.
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.subplot(144)
- plt.title('draw_shell')
- nx.draw_shell(G) #Draw networkx graph with shell layout.
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.show()


9.2使用Graphviz AGraph (dot)
有些同学不知道如何安装Graphviz,我在这里作一个说明:
1.linux是安装graphviz即可,我使用的命令是:
- sudo apt install graphviz
2.Windows我没用实践过,不过我查到Graphviz有官网,里面有windows安装包,地址看下:
http://www.graphviz.org/download/
- G.clear()
- from networkx.drawing.nx_pydot import write_dot,read_dot
- plt.subplots(1,3,figsize=(15,5))
- K5 = nx.complete_graph(5)
- A = nx.nx_agraph.to_agraph(K5) #Return a pygraphviz graph from a NetworkX graph N.
- G1 = nx.nx_agraph.from_agraph(A) #Return a NetworkX Graph or DiGraph from a PyGraphviz graph.
- plt.subplot(131)
- plt.title('原图',fontproperties=myfont)
- nx.draw_random(G1) #Draw the graph G with a random layout.
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- write_dot(G1, 'graph.test') #Write NetworkX graph G to Graphviz dot format on path.
- G2=read_dot('graph.test') #Return a NetworkX graph from a dot file on path.
- plt.subplot(132)
- plt.title('保存原图后并读取',fontproperties=myfont)
- nx.draw_random(G2) #Draw the graph G with a random layout.
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- G3 = nx.petersen_graph()
- pos = nx.nx_agraph.graphviz_layout(G3) #Create node positions for G using Graphviz.
- plt.subplot(133)
- plt.title('graphviz_layout',fontproperties=myfont)
- nx.draw_random(G3) #Draw the graph G with a random layout.
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.show()

9.3图布局
- #定义graph
- nodes=[0,1,2,3,4,5,'a','b','c']
- edges=[(0,1),(0,5),(1,2),(1,4),(2,1),(2,4),('a','b'),('b','c'),('c','a')]
- G=nx.Graph()
- G.add_nodes_from(nodes)
- G.add_edges_from(edges)
- plt.subplots(2,3,figsize=(18,6))
- plt.subplot(231)
- plt.title('circular_layout')
- pos=nx.circular_layout(G) #Position nodes on a circle.
- nx.draw(G,pos, with_labels=True, font_weight='bold')
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.subplot(232)
- plt.title('kamada_kawai_layout')
- pos=nx.kamada_kawai_layout(G) #Position nodes using Kamada-Kawai path-length cost-function.
- nx.draw(G, pos,with_labels=True, font_weight='bold')
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.subplot(233)
- plt.title('random_layout')
- pos=nx.random_layout(G) #Position nodes uniformly at random in the unit square.
- nx.draw(G, pos,with_labels=True, font_weight='bold')
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.subplot(234)
- plt.title('shell_layout')
- pos=nx.shell_layout(G) #Position nodes in concentric circles.
- nx.draw(G, pos,with_labels=True, font_weight='bold')
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.subplot(235)
- plt.title('spring_layout')
- pos=nx.spring_layout(G)#Position nodes using Fruchterman-Reingold force-directed algorithm.
- nx.draw(G, pos, with_labels=True, font_weight='bold')
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.subplot(236)
- plt.title('spectral_layout')
- pos=nx.spectral_layout(G) #Position nodes using the eigenvectors of the graph Laplacian.
- nx.draw(G, pos, with_labels=True, font_weight='bold')
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.show()

NetworkX系列教程(8)-Drawing Graph的更多相关文章
- NetworkX系列教程(1)-创建graph
小书匠Graph图论 研究中经常涉及到图论的相关知识,而且常常面对某些术语时,根本不知道在说什么.前不久接触了NetworkX这个graph处理工具,发现这个工具已经解决绝大部分的图论问题(也许只是我 ...
- NetworkX系列教程(7)-对graph进行分析
小书匠Graph图论 graph构建完成后,对graph的连通等属性进行分析. 目录: 8.对图进行分析 8.1连通子图 8.2弱联通 8.3强连通 8.4子图 8.5条件过滤 注意:如果代码出现找不 ...
- NetworkX系列教程(6)-对graph进行操作
小书匠Graph图论 graph生成后,除了有查看操作,还有移除等操作,还有其他更多操作,具体可以看这里.下面将比较graph操作前后的不同. 目录: 7.对图进行操作 7.1移除某些节点和边 7.2 ...
- NetworkX系列教程(5)-查看graph的信息
小书匠Graph图论 有时候graph建好后,我们并不清除该graph内节点的,边的信息,这就需要调用函数去查看了. 目录: 6.查看Graph的信息 6.1查看graph内节点,边的 6.2查看gr ...
- NetworkX系列教程(4)-设置graph的信息
小书匠Graph图论 要画出美观的graph,需要对graph里面的节点,边,节点的布局都要进行设置,具体可以看官方文档:Adding attributes to graphs, nodes, and ...
- NetworkX系列教程(2)-graph生成器
小书匠Graph图论 本节主要讲解如何快速使用内置的方法生成graph,官方的文档在这里,里面包含了networkX的所有graph生成器,下面的内容只是我节选的内容,并将graph画出来而已. 声明 ...
- NetworkX系列教程(11)-graph和其他数据格式转换
小书匠 Graph 图论 学过线性代数的都了解矩阵,在矩阵上的文章可做的很多,什么特征矩阵,单位矩阵等.grpah存储可以使用矩阵,比如graph的邻接矩阵,权重矩阵等,这节主要是在等到graph后 ...
- NetworkX系列教程(3)-手动创建graph
小书匠Graph图论 不可否认,日常中我们使用最多的还是,使用自己的数据去手动创建自己的图形,而不是使用生成器,现从给graph添加点和边入手,讲解手动创建graph. 目录: 3.给graph添加节 ...
- NetworkX系列教程(10)-算法之五:广度优先与深度优先
小书匠Graph图论 重头戏部分来了,写到这里我感觉得仔细认真点了,可能在NetworkX中,实现某些算法就一句话的事,但是这个算法是做什么的,用在什么地方,原理是怎么样的,不清除,所以,我决定先把图 ...
随机推荐
- Java内存模型学习笔记(一)—— 基础
1.并发编程模型的分类 在并发编程中,我们需要处理两个关键的问题:1.线程间如何通信,2.线程间如何同步.通信是指线程之间以何种机制来交换信息,同步是指程序用于不同线程之间操作发生相对顺序的机制. 在 ...
- C/C++读写文件的几种方法fstream fopen、fwrite()、fread()操作
C中采用的主要是文件指针的办法,C++中对文件的操作主要运用了"文件流"(即非标准的输入输出)的思想 c读写文件fopen C 库函数 FILE *fopen(const char ...
- Pyhton模块和包
一 模块 1.1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用pytho ...
- Cookie实现记住密码的功能
一.什么是Cookie cookie是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段.Cookie的目的就是为用户带来方便,为网站带来增值.虽然有着许多误传,事实上Cookie并不会造成严重 ...
- Java 之 字节流
一.一切皆为字节 一切文件数据(文本.图片.视频等)在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此.所以,字节流可以传输任意文件数据.在操作流的时候,我们要时刻明确,无论使 ...
- 修改docker容器端口映射的方法
大家都知道docker run可以指定端口映射,但是容器一旦生成,就没有一个命令可以直接修改.通常间接的办法是,保存镜像,再创建一个新的容器,在创建时指定新的端口映射. 有没有办法不保存镜像而直接修改 ...
- Haddop完全分布式集群搭建
hadoop完全分布式搭建 建议(遇到的坑): 如果自己用的操作系统就是linux,我本身是deepin系统,装了两台虚拟机,结果,用户名没有配置,导致启动不了,因为hadoop的master节点启动 ...
- Django之小结
常用的函数方法与包的调用 # 登陆视图函数 def login(request): if request.method == 'GET': return render(request,'login.h ...
- 使用git下载和引进项目流程
1.下载地址https://git-scm.com/download/win 2.idea中加入git插件 Git插件引入 3.复制github中项目地址在idea中打开 4.使用git ...
- 如何使用Systemctl管理系统服务和单元?
chu原文:How To Use Systemctl to Manage Systemd Services and Units 简书:如何使用Systemctl管理系统服务和单元? 引言 System ...