笔记

  1. # https://www.jianshu.com/p/e543dc63454f
  2. import networkx as nx
  3. import matplotlib.pyplot as plt
  4. ############################################################################# (创建)初始化图模型
  5. """
  6. nx.Graph() 简单无向图
  7. g = nx.DiGraph() 简单有向图
  8. g = nx.Grap(),DiGraph() 有自环
  9. nx.MultiGraph(), nx.MultiDiGraph() 有重边
  10. """
  11. g = nx.Graph()
  12. g.clear() # 将图上元素清空
  13. ############################################################################## 添加节点
  14. """
  15. + 节点可以是任意数据类型
  16. + 添加一个节点 g.add_node(ele)
  17. g.add_node(1)
  18. g.add_node("a")
  19. g.add_node("spam")
  20. + 添加一组节点:提前构建好了一个节点列表,将其一次性加进来,这跟后边加边的操作是具有一致性的 g.add_nodes_from(eles)
  21. g.add_nodes_from([2,3])
  22. g.add_nodes_from(a) # 其中,a = [2,3]
  23. + 区别:
  24. g.add_node("spam") # 添加了一个名为spam的节点
  25. g.add_nodes_from("spam") # 添加了4个节点,名为s,p,a,m
  26. g.nodes() # 可将以上5个节点打印出来看看
  27. + 其它: 加一组从0开始的连续数字的节点
  28. H = nx.path_graph(10)
  29. g.add_nodes_from(H) # 将0~9加入了节点 # #但请勿使用g.add_node(H)
  30. """
  31. # g.add_node("spam") # 添加了一个名为spam的节点
  32. # g.add_nodes_from(["a","b","c","d","e","f"]) # 添加了4个节点,名为s,p,a,m
  33. H = nx.path_graph(4)
  34. g.add_nodes_from(H) # 将0~9加入了节点 # #但请勿使用g.add_node(H)
  35. ############################################################################## 移除节点
  36. """
  37. + 与添加节点同理
  38. """
  39. # g.remove_node(node_name)
  40. # g.remove_nodes_from(nodes_list)
  41. ############################################################################## 添加边
  42. """
  43. + 边是由对应节点的名字的元组组成,加一条边
  44. + 加入一条边 g.add_edge(eleA,eleB)
  45. g.add_edge(1,2);
  46. e = (2,3);
  47. g.add_edge(*e) #直接g.add_edge(e)数据类型不对,*是将元组中的元素取出
  48. + 加入一组边 g.add_edges_from([(eleA,eleB),...,(eleC,eleD)])
  49. g.add_edges_from([(1,2),(1,3)])
  50. g.add_edges_from([("a","spam") , ("a",2)])
  51. + 加入一组系列连续的边 nx.path_graph(n)
  52. n = 10
  53. H = nx.path_graph(n)
  54. g.add_edges_from(H.edges()) #添加了0~1,1~2 ... n-2~n-1这样的n-1条连续的边
  55. + 补充
  56. G.add_weight_edges_from(list)
  57. G.add_weight_edge(1,2,3.0) # 第三个是权值
  58. G.add_edges_from(list) # 添加列表中的边
  59. """
  60. # g.add_edge(1,2);
  61. # e = (2,3);
  62. # g.add_edge(*e) #直接g.add_edge(e)数据类型不对,*是将元组中的元素取出
  63. ############################################################################## 删除边
  64. """
  65. g.remove_edge(edge)
  66. g.remove_edges_from(edges_list)
  67. """
  68. ############################################################################## 查看图上节点和边的信息
  69. """ g = nx.Graph(day="Monday")
  70. g.graph # {'day': 'Monday'} # 查看图模型
  71. g.graph['day'] = 'Tuesday' # g.graph # {'day': 'Tuesday'} # 修改图模型
  72. g.number_of_nodes() # 查看点的数量
  73. g.number_of_edges() # 查看边的数量
  74. g.nodes() # 返回所有点的信息(list)
  75. g.edges() # 返回所有边的信息(list中每个元素是一个tuple)
  76. g.neighbors(1) # 所有与1这个点相连的点的信息以列表的形式返回
  77. + 节点属性设置
  78. g.add_node('benz', money=10000, fuel="1.5L")
  79. print g.node['benz'] # {'fuel': '1.5L', 'money': 10000}
  80. print g.node['benz']['money'] # 10000
  81. print g.nodes(data=True) # data默认false就是不输出属性信息,修改为true,会将节点名字和属性信息一起输出
  82. g[1] #查看所有与1相连的边的属性,格式输出:{0: {}, 2: {}} 表示1和0相连的边没有设置任何属性(也就是{}没有信息),同理1和2相连的边也没有任何属性
  83. + Directed graphs
  84. + DG = nx.DiGraph()
  85. + DG.add_weighted_edges_from([(1,2,0.5), (3,1,0.75), (1,4,0.3)]) # 添加带权值的边
  86. + DG.out_degree(1) # 打印结果:2 表示:找到1的出度
  87. + DG.out_degree(1, weight='weight') # 打印结果:0.8 表示:从1出去的边的权值和,这里权值是以weight属性值作为标准,如果你有一个money属性,那么也可以修改为weight='money',那么结果就是对money求和了
  88. + DG.successors(1) # [2,4] 表示1的后继节点有2和4
  89. + DG.predecessors(1) # [3] 表示只有一个节点3有指向1的连边
  90. + MG=nx.MultiGraph()
  91. MG.add_weighted_edges_from([(1,2,.5), (1,2,.75), (2,3,.5)])
  92. print MG.degree(weight='weight') # {1: 1.25, 2: 1.75, 3: 0.5}
  93. GG=nx.Graph()
  94. for n,nbrs in MG.adjacency_iter():
  95. for nbr,edict in nbrs.items():
  96. minvalue=min([d['weight'] for d in edict.values()])
  97. GG.add_edge(n,nbr, weight = minvalue)
  98. print nx.shortest_path(GG,1,3) # [1, 2, 3]
  99. """
  100. print(g.nodes(data=True))
  101. ############################################################################## 绘制图像 (画布)
  102. nx.draw(g,with_labels=True)
  103. # nx.draw(g) # 绘制
  104. # nx.draw(g, pos=nx.spectral_layout(g), nodecolor='y', edge_color='b');
  105. # nx.draw_networkx(BG, pos, edges=edges, labels=labels) # BG = nx.Graph() ; edges = BG.edges();pos = dict() ; labels = dict((n, "(" + n + "," + d['_type'] + ")") for n,d in BG.nodes(data=True))
  106. ############################################################################## 显示图像
  107. """
  108. plt.show() # 控制台显示图像
  109. plt.savefig("C:/Users/千千寰宇/Desktop/path.png") # 存储图像 (存储/显示)二选一
  110. """
  111. plt.show()
  112. # plt.savefig("C:/Users/千千寰宇/Desktop/path.png") # 存储图像 (存储/显示)二选一

Demo

  1. # coding = utf-8
  2. import networkx as nx
  3. import matplotlib.pyplot as plt
  4. # 解决图像中的中文乱码问题
  5. plt.rcParams['font.sans-serif'] = ['SimHei']
  6. plt.rcParams['font.family']='sans-serif'
  7. g = nx.DiGraph();
  8. g.clear();
  9. g.add_edge("可爱","菇凉",label="test",weight=4.7);
  10. g.add_edge("漂亮","菇凉",weight=0.98);
  11. g.add_edge("悲伤","菇凉");
  12. g.edges["悲伤", "菇凉"]['color'] = "blue"
  13. g["可爱"]["菇凉"]['color'] = "yellow"
  14. print(g);
  15. # g.add_node("可爱")
  16. # g.add_node("漂亮");
  17. # g.add_node("悲伤");
  18. # g.add_node("菇凉");
  19. print(g.nodes())
  20. print(g.nodes().data()) # 显示边的数据
  21. print(g.edges().data())
  22. # nx.draw(g,with_labels=True) # 显示节点的名称
  23. # 显示边的标签信息
  24. pos=nx.spring_layout(g);
  25. nx.draw_spring(g,with_labels=True); # 显示节点的名称
  26. nx.draw_networkx_edge_labels(g,pos,font_size=14,alpha=0.5,rotate=True);
  27. plt.axis('off')
  28. plt.show()
  1. # output
  2. ['可爱', '菇凉', '漂亮', '悲伤']
  3. [('可爱', {}), ('菇凉', {}), ('漂亮', {}), ('悲伤', {})]
  4. [('可爱', '菇凉', {'label': 'test', 'weight': 4.7, 'color': 'yellow'}), ('漂亮', '菇凉', {'weight': 0.98}), ('悲伤', '菇凉', {'color': 'blue'})]

Python之网络模型与图形绘制工具networkx的更多相关文章

  1. Graphviz--图形绘制工具

    可以试试ProcessOn.com, 一个专业在线画流程图的工具,使用Chrome&Firefox浏览器,支持快捷键,非常方便.快捷键如下:Ctrl+A 全选,当移动整张图时非常方便Ctrl+ ...

  2. python库之turtle(图形绘制) 开启新的快乐源泉

    相信有不少人学习python 都是听了老前辈的推荐 “学python好,python有趣的代码多” 比如说画一只小狮子 这就是今天想要介绍的绘制图形库-turtle 如果也想这样画一只小狮子,或者其他 ...

  3. 014 Python基本图形绘制小结

    目录 一.Python基本语法元素 1.1 温度转换 二.Python基本图形绘制 2.1 Python蟒蛇绘制 一.Python基本语法元素 缩进.注释.命名.变量.保留字 数据类型.字符串. 整数 ...

  4. python下的复杂网络编程包networkx的使用(摘抄)

    原文:http://blog.sciencenet.cn/home.php?mod=space&uid=404069&do=blog&classid=141080&vi ...

  5. 【神经网络与深度学习】【python开发】caffe-windows使能python接口使用draw_net.py绘制网络结构图过程

    [神经网络与深度学习][python开发]caffe-windows使能python接口使用draw_net.py绘制网络结构图过程 标签:[神经网络与深度学习] [python开发] 主要是想用py ...

  6. 13个JavaScript图表(JS图表)图形绘制插件【转】

    现在网络上又有越来越多的免费的(JS 图表)JavaScript图表图形绘制插件.我之前给一家网站做过复杂的图形,我们用的是 highchart.在那段时间,没有很多可供选择的插件.但现在不同了,很容 ...

  7. 推荐12个最好的 JavaScript 图形绘制库

    众多周知,图形和图表要比文本更具表现力和说服力.图表是数据图形化的表示,通过形象的图表来展示数据,比如条形图,折线图,饼图等等.可视化图表可以帮助开发者更容易理解复杂的数据,提高生产的效率和 Web  ...

  8. python下的复杂网络编程包networkx的安装及使用

    由于py3.x与工具包的兼容问题,这里采用py2.7 1.python下的复杂网络编程包networkx的使用: http://blog.sina.com.cn/s/blog_720448d30101 ...

  9. 13个JavaScript图表(JS图表)图形绘制插件

    转自:http://blog.jobbole.com/13671/ 1. Flash 过去是最佳解决方案,但很多人多在从那迁移: 2. 现代浏览器及其更强大的计算能力,使其在转化绘制实时数据方面的能力 ...

随机推荐

  1. Pycharm Community 配置 Django 开发环境

    1. 安装数据库可视化工具 Database Navigator 2. 括号匹配高亮工具 HighlightBracketPair (...) Web 开发放弃 Pycharm Community 版 ...

  2. django 发送邮件功能

    setting.py # 邮件配置 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.e ...

  3. C#信号量(Semaphore,SemaphoreSlim)

    Object->MarshalByRefObject->WaitHandle->Semaphore 1.作用: 多线程环境下,可以控制线程的并发数量来限制对资源的访问 2.举例: S ...

  4. 记录 vant Picker 选择器,实现三级联动,传对应省市区code值

    最近使用vant UI写移动端,感觉还不错 功能挺全的,带的还有省市区三级联动. 但是 突然遇到一个 产品要传的 省市区的code码,还和vant的 邮编不一样,我*****. 看了一下vant UI ...

  5. 【方法】JS判断当前页面环境:PC端/移动端,安卓/IOS,微信环境/QQ环境等等

    [主要知识] 浏览器设备信息:navigator.userAgent(本文中主要用到知识) 浏览器版本信息:navigator.appVersion var ua = navigator.userAg ...

  6. [Vue] : Vue指令

    Vue指令之 v-cloak v-cloak是解决解决插值表达式的闪烁问题 . 给插值表达式的元素加上v-cloak <p v-cloak>{{ msg }}</p> 为v-c ...

  7. HDU 5974 A Simple Math Problem ——(数论,大连区域赛)

    给大一的排位赛中数论的一题.好吧不会做...提供一个题解吧:http://blog.csdn.net/aozil_yang/article/details/53538854. 又学了一个新的公式..如 ...

  8. Ubuntu 16.04 一键安装P4开发环境记录

    写在最前 P4开发环境安装可采用陈翔同学的一键安装脚本:p4Installer p4c-bm是P4-14的编译器,p4c是现在主流P4-16的编译器,bmv2是支持P4运行的软件交换机 系统环境 在安 ...

  9. mysql delete别名

    有一个表的数据比较大,然后需要进行关联删除,删除的时候发现如下SQL报错:ELETE FROM test.test1 a WHERE EXISTS (SELECT 1 FROM test.test2 ...

  10. Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000794500000, 576716800, 0)

    linux基于tomcat部署的web应用程序报 Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x000000 ...