小书匠Graph图论

如果只是简单使用nx.draw,是无法定制出自己需要的graph,并且这样的graph内的点坐标的不定的,运行一次变一次,实际中一般是要求固定的位置,这就需要到布局的概念了.详细的画图信息可以看这里,代码中的关键部分使用了英文进行注释,不在另外注释.

目录:


注意:如果代码出现找不库,请返回第一个教程,把库文件导入.

9.Drawing Graph

9.1使用Matplotlib

  1. #定义graph 

  2. nodes=[0,1,2,3,4,5,'a','b','c'] 

  3. edges=[(0,1),(0,5),(1,2),(1,4),(2,1),(2,4),('a','b'),('b','c'),('c','a')] 

  4. G=nx.Graph() 

  5. G.add_nodes_from(nodes) 

  6. G.add_edges_from(edges) 


  7. #使用spring_layout布局 

  8. pos=nx.spring_layout(G) 


  9. plt.subplots(2,4,figsize=(18,6)) 

  10. plt.subplot(241) 

  11. plt.title('spring_layout') 

  12. nx.draw(G, with_labels=True, font_weight='bold') #Draw the graph G with Matplotlib. 

  13. plt.axis('on') 

  14. plt.xticks([]) 

  15. plt.yticks([]) 


  16. plt.subplot(242) 

  17. plt.title('draw_networkx') 

  18. nx.draw_networkx(G) #Draw the graph G using Matplotlib. 

  19. plt.axis('on') 

  20. plt.xticks([]) 

  21. plt.yticks([]) 


  22. plt.subplot(243) 

  23. plt.title('draw_networkx_nodes') 

  24. nx.draw_networkx_nodes(G,pos) #Draw the nodes of the graph G. 

  25. plt.axis('on') 

  26. plt.xticks([]) 

  27. plt.yticks([]) 


  28. plt.subplot(244) 

  29. plt.title('draw_networkx_edges') 

  30. nx.draw_networkx_edges(G,pos) #Draw the edges of the graph G. 

  31. plt.axis('on') 

  32. plt.xticks([]) 

  33. plt.yticks([]) 


  34. plt.subplot(245) 

  35. plt.title('draw_networkx_labels') 

  36. nx.draw_networkx_labels(G,pos) #Draw node labels on the graph G. 

  37. plt.axis('on') 

  38. plt.xticks([]) 

  39. plt.yticks([]) 


  40. plt.subplot(246) 

  41. plt.title('draw_networkx_edge_labels') 

  42. nx.draw_networkx_edge_labels(G,pos) #Draw edge labels. 

  43. plt.axis('on') 

  44. plt.xticks([]) 

  45. plt.yticks([]) 


  46. plt.subplot(247) 

  47. plt.title('draw_circular') 

  48. nx.draw_circular(G,) #Draw the graph G with a circular layout. 

  49. plt.axis('on') 

  50. plt.xticks([]) 

  51. plt.yticks([]) 


  52. plt.subplot(248) 

  53. plt.title('draw_kamada_kawai') 

  54. nx.draw_kamada_kawai(G) #Draw the graph G with a Kamada-Kawai force-directed layout. 

  55. plt.axis('on') 

  56. plt.xticks([]) 

  57. plt.yticks([]) 

  58. plt.show() 

  59. plt.close() 


  60. plt.subplots(1,4,figsize=(18,3)) 

  61. plt.subplot(141) 

  62. plt.title('draw_random') 

  63. nx.draw_random(G) #Draw the graph G with a random layout. 

  64. plt.axis('on') 

  65. plt.xticks([]) 

  66. plt.yticks([]) 


  67. plt.subplot(142) 

  68. plt.title('draw_spectral') 

  69. nx.draw_spectral(G,) #Draw the graph G with a spectral layout. 

  70. plt.axis('on') 

  71. plt.xticks([]) 

  72. plt.yticks([]) 


  73. plt.subplot(143) 

  74. plt.title('draw_spring') 

  75. nx.draw_spring(G) #Draw the graph G with a spring layout. 

  76. plt.axis('on') 

  77. plt.xticks([]) 

  78. plt.yticks([]) 


  79. plt.subplot(144) 

  80. plt.title('draw_shell') 

  81. nx.draw_shell(G) #Draw networkx graph with shell layout. 

  82. plt.axis('on') 

  83. plt.xticks([]) 

  84. plt.yticks([]) 


  85. plt.show() 


Matplotlib布局1

Matplotlib布局2

9.2使用Graphviz AGraph (dot)

有些同学不知道如何安装Graphviz,我在这里作一个说明:

1.linux是安装graphviz即可,我使用的命令是:

  1. sudo apt install graphviz 

2.Windows我没用实践过,不过我查到Graphviz有官网,里面有windows安装包,地址看下:

http://www.graphviz.org/download/

  1. G.clear() 

  2. from networkx.drawing.nx_pydot import write_dot,read_dot 


  3. plt.subplots(1,3,figsize=(15,5)) 

  4. K5 = nx.complete_graph(5) 


  5. A = nx.nx_agraph.to_agraph(K5) #Return a pygraphviz graph from a NetworkX graph N. 

  6. G1 = nx.nx_agraph.from_agraph(A) #Return a NetworkX Graph or DiGraph from a PyGraphviz graph. 

  7. plt.subplot(131) 

  8. plt.title('原图',fontproperties=myfont) 

  9. nx.draw_random(G1) #Draw the graph G with a random layout. 

  10. plt.axis('on') 

  11. plt.xticks([]) 

  12. plt.yticks([]) 


  13. write_dot(G1, 'graph.test') #Write NetworkX graph G to Graphviz dot format on path. 

  14. G2=read_dot('graph.test') #Return a NetworkX graph from a dot file on path. 

  15. plt.subplot(132) 

  16. plt.title('保存原图后并读取',fontproperties=myfont) 

  17. nx.draw_random(G2) #Draw the graph G with a random layout. 

  18. plt.axis('on') 

  19. plt.xticks([]) 

  20. plt.yticks([]) 


  21. G3 = nx.petersen_graph() 

  22. pos = nx.nx_agraph.graphviz_layout(G3) #Create node positions for G using Graphviz. 


  23. plt.subplot(133) 

  24. plt.title('graphviz_layout',fontproperties=myfont) 

  25. nx.draw_random(G3) #Draw the graph G with a random layout. 

  26. plt.axis('on') 

  27. plt.xticks([]) 

  28. plt.yticks([]) 


  29. plt.show() 


Graphviz画图

9.3图布局

  1. #定义graph 

  2. nodes=[0,1,2,3,4,5,'a','b','c'] 

  3. edges=[(0,1),(0,5),(1,2),(1,4),(2,1),(2,4),('a','b'),('b','c'),('c','a')] 

  4. G=nx.Graph() 

  5. G.add_nodes_from(nodes) 

  6. G.add_edges_from(edges) 


  7. plt.subplots(2,3,figsize=(18,6)) 

  8. plt.subplot(231) 

  9. plt.title('circular_layout') 

  10. pos=nx.circular_layout(G) #Position nodes on a circle. 

  11. nx.draw(G,pos, with_labels=True, font_weight='bold') 

  12. plt.axis('on') 

  13. plt.xticks([]) 

  14. plt.yticks([]) 


  15. plt.subplot(232) 

  16. plt.title('kamada_kawai_layout') 

  17. pos=nx.kamada_kawai_layout(G) #Position nodes using Kamada-Kawai path-length cost-function. 

  18. nx.draw(G, pos,with_labels=True, font_weight='bold') 

  19. plt.axis('on') 

  20. plt.xticks([]) 

  21. plt.yticks([]) 


  22. plt.subplot(233) 

  23. plt.title('random_layout') 

  24. pos=nx.random_layout(G) #Position nodes uniformly at random in the unit square. 

  25. nx.draw(G, pos,with_labels=True, font_weight='bold') 

  26. plt.axis('on') 

  27. plt.xticks([]) 

  28. plt.yticks([]) 


  29. plt.subplot(234) 

  30. plt.title('shell_layout') 

  31. pos=nx.shell_layout(G) #Position nodes in concentric circles. 

  32. nx.draw(G, pos,with_labels=True, font_weight='bold') 

  33. plt.axis('on') 

  34. plt.xticks([]) 

  35. plt.yticks([]) 


  36. plt.subplot(235) 

  37. plt.title('spring_layout') 

  38. pos=nx.spring_layout(G)#Position nodes using Fruchterman-Reingold force-directed algorithm. 

  39. nx.draw(G, pos, with_labels=True, font_weight='bold') 

  40. plt.axis('on') 

  41. plt.xticks([]) 

  42. plt.yticks([]) 


  43. plt.subplot(236) 

  44. plt.title('spectral_layout') 

  45. pos=nx.spectral_layout(G) #Position nodes using the eigenvectors of the graph Laplacian. 

  46. nx.draw(G, pos, with_labels=True, font_weight='bold') 

  47. plt.axis('on') 

  48. plt.xticks([]) 

  49. plt.yticks([]) 


  50. plt.show() 


图布局

NetworkX系列教程(8)-Drawing Graph的更多相关文章

  1. NetworkX系列教程(1)-创建graph

    小书匠Graph图论 研究中经常涉及到图论的相关知识,而且常常面对某些术语时,根本不知道在说什么.前不久接触了NetworkX这个graph处理工具,发现这个工具已经解决绝大部分的图论问题(也许只是我 ...

  2. NetworkX系列教程(7)-对graph进行分析

    小书匠Graph图论 graph构建完成后,对graph的连通等属性进行分析. 目录: 8.对图进行分析 8.1连通子图 8.2弱联通 8.3强连通 8.4子图 8.5条件过滤 注意:如果代码出现找不 ...

  3. NetworkX系列教程(6)-对graph进行操作

    小书匠Graph图论 graph生成后,除了有查看操作,还有移除等操作,还有其他更多操作,具体可以看这里.下面将比较graph操作前后的不同. 目录: 7.对图进行操作 7.1移除某些节点和边 7.2 ...

  4. NetworkX系列教程(5)-查看graph的信息

    小书匠Graph图论 有时候graph建好后,我们并不清除该graph内节点的,边的信息,这就需要调用函数去查看了. 目录: 6.查看Graph的信息 6.1查看graph内节点,边的 6.2查看gr ...

  5. NetworkX系列教程(4)-设置graph的信息

    小书匠Graph图论 要画出美观的graph,需要对graph里面的节点,边,节点的布局都要进行设置,具体可以看官方文档:Adding attributes to graphs, nodes, and ...

  6. NetworkX系列教程(2)-graph生成器

    小书匠Graph图论 本节主要讲解如何快速使用内置的方法生成graph,官方的文档在这里,里面包含了networkX的所有graph生成器,下面的内容只是我节选的内容,并将graph画出来而已. 声明 ...

  7. NetworkX系列教程(11)-graph和其他数据格式转换

    小书匠 Graph 图论  学过线性代数的都了解矩阵,在矩阵上的文章可做的很多,什么特征矩阵,单位矩阵等.grpah存储可以使用矩阵,比如graph的邻接矩阵,权重矩阵等,这节主要是在等到graph后 ...

  8. NetworkX系列教程(3)-手动创建graph

    小书匠Graph图论 不可否认,日常中我们使用最多的还是,使用自己的数据去手动创建自己的图形,而不是使用生成器,现从给graph添加点和边入手,讲解手动创建graph. 目录: 3.给graph添加节 ...

  9. NetworkX系列教程(10)-算法之五:广度优先与深度优先

    小书匠Graph图论 重头戏部分来了,写到这里我感觉得仔细认真点了,可能在NetworkX中,实现某些算法就一句话的事,但是这个算法是做什么的,用在什么地方,原理是怎么样的,不清除,所以,我决定先把图 ...

随机推荐

  1. jwt 无状态分布式授权

    基于JWT(Json Web Token)的授权方式 JWT 是JSON风格轻量级的授权和身份认证规范,可实现无状态.分布式的Web应用授权: 从客户端请求服务器获取token, 用该token 去访 ...

  2. Linux mount/unmount 挂载和卸载指令

    对于Linux用户来讲,不论有几个分区,分别分给哪一个目录使用,它总归就是一个根目录.一个独立且唯一的文件结构 Linux中每个分区都是用来组成整个文件系统的一部分,她在用一种叫做“挂载”的处理方法, ...

  3. 在论坛中出现的比较难的sql问题:24(生成时间段)

    原文:在论坛中出现的比较难的sql问题:24(生成时间段) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有必要记录下来 ...

  4. android studio 开发环境配置

    android studio 开发环境配置 参考: 第一次使用Android Studio时你应该知道的一切配置 https://www.cnblogs.com/qianguyihao/p/43909 ...

  5. 【转载】如何自己DIY组装一台台式电脑

    针对很多懂计算机的人员来说,有时候都希望自己DIY组装一台台式机,来达到自己的个性化要求以及省钱.其实自己DIY组装一台电脑也很简单,将相应的CPU处理器.主板.内存条.硬盘.固态硬盘.电脑机箱.屏幕 ...

  6. vue进入页面时不在顶部,检测滚动返回顶部按钮

    这里是本小白使用时遇到的问题及个人使用的方法可能并不完美. 1.监测浏览器滚动条滚动事件及滚动距离 dmounted() { window.addEventListener("scroll& ...

  7. Python:GeoJson格式的多边形裁剪Tiff影像并计算栅格数值

    JSON是通过键值对表示数据对象的一种格式,其全称为JavaScript Object Notation,它采用完全独立于编程语言的文本格式来存储和表示数据,轻量级.简洁清晰的层次结构.容易解析等特点 ...

  8. Nginx 安装目录 和 编译参数

    安装目录详解 查看安装nginx之后总共生成了哪些文件 rpm -ql nginx 在上面的文件中包括配置文件和日志文件 /etc/logrotate.d/nginx 类型:配置文件 作用:Nginx ...

  9. git pull 的时候 把本地的修改 覆盖远程端

    首先,git pull 可以分成两步,git fetch 和git merge 使用git branch -a可以看出来    git merge 相当于当前分支  和 origin/master分支 ...

  10. 【20191118会议】针对华为云CCE 问题总结

    针对华为云CCE问题总结 如何购买CCE集群 可以分为测试环境和生产环境,针对使用范围进行购买集群. 测试环境 可以进行公用 生产环境建议使用单独集群 尤其针对部门大 耦合性不高 ,生产环境 建议使用 ...