networkx的使用

不念不忘少年蓝@ 2022-12-08 15:31 224阅读 0赞

networkx作为图论的python的工具,使用非常简单,这里就来小结一下,

首先需要安装:

  1. pip install networkx

使用:

(1)画一个简单的图

  1. import networkx as nx
  2. from pylab import show
  3. ##创建图
  4. g = nx.Graph();
  5. ##添加图节点
  6. g.add_node(0);
  7. g.add_node(1);
  8. g.add_node(2);
  9. g.add_node(3);
  10. g.add_node(4);
  11. ##添加图边缘
  12. g.add_edge(0,1);
  13. g.add_edge(1,3);
  14. g.add_edge(1,2);
  15. g.add_edge(2,3);
  16. g.add_edge(0,3);
  17. g.add_edge(0,4);
  18. g.add_edge(3,4);
  19. nx.draw(g)
  20. show()

运行结果:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3VfNDM4_size_16_color_FFFFFF_t_70

当然这个可以批量操作

  1. g = nx.Graph();
  2. g.add_nodes_from([0,1,2,3,4])
  3. g.add_edges_from([(0,1),(1,3),(1,2),(2,3),(0,3),(0,4),(3,4)])
  4. nx.draw(g)
  5. show()

结果:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3VfNDM4_size_16_color_FFFFFF_t_70 1

(2)修改点和点直接的权重值,也就是修改边长

  1. g = nx.Graph();
  2. g.add_nodes_from([0,1,2,3,4])
  3. g.add_edges_from([(0,1),(1,3),(1,2),(2,3),(0,3),(0,4),(3,4)])
  4. g.add_weighted_edges_from([(0, 1, 1.0), (1, 3, 2.0),(1, 2, 3.0), (2, 3, 4.0),(0, 3, 2.5), (0, 4, 2.0),(3, 4, 1.0)])
  5. nx.draw(g,with_labels=True)
  6. show()

结果:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3VfNDM4_size_16_color_FFFFFF_t_70 2

注意的是,我们如果不设置权重值的时候,数值就是随机产生,结果满足三角形三边的长度关系,我们自己设置的数值如果不蛮虚的三角形条件的时候,设置的数值就不生效,会自动设置满足成三角形三边的关系。还有就是,我这里使用draw方法的时候,使用参数显示节点的名称,默认是不显示的,看看前面两个图就能知道。

(3)使用自带的图结构

networkx自带了丰富的图结构,下面展示两个:

  1. tutte = nx.tutte_graph()
  2. nx.draw(tutte,with_labels=True)
  3. show()

结果:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3VfNDM4_size_16_color_FFFFFF_t_70 3

  1. maze = nx.sedgewick_maze_graph()
  2. nx.draw(maze)
  3. show()

结果:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3VfNDM4_size_16_color_FFFFFF_t_70 4

(4)画圈图

  1. G = nx.karate_club_graph()
  2. nx.draw_circular(G, with_labels=True)
  3. show()

结果:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3VfNDM4_size_16_color_FFFFFF_t_70 5

看一下正常画图的:

  1. G = nx.karate_club_graph()
  2. nx.draw(G, with_labels=True)
  3. show()

结果:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3VfNDM4_size_16_color_FFFFFF_t_70 6

上面展示了两个画图函数的区别,结果是一样的,只是展示方式不一样。

(5)批量设置画图参数

  1. options = {'node_color': 'black', 'node_size': 100,'width': 3}
  2. tutte = nx.tutte_graph()
  3. nx.draw(tutte,**options)
  4. show()

结果:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3VfNDM4_size_16_color_FFFFFF_t_70 7

参考:https://www.osgeo.cn/networkx/

发表评论

表情:
评论列表 (有 0 条评论,224人围观)

还没有评论,来说两句吧...

相关阅读

    相关 networkx画弯曲

    networkx里面自绘的边都是直的,当多个节点处于同一条直线还有连边的时候就特别难看。如果能否让networkx画弯曲的边,那么这种情况就可以好办的多了。 思路为: 1.

    相关 python之networkx库小结

    备战数模,还是知道多点好。networkx这个库的话,画网络图贼好用。 一、安装 安装的话,跟其他包的安装差不多吧。我用的是anaconda就不用装了。其他的话,就用pip