1. 创建一个图

import networkx as nx

g = nx.Graph()

g.clear() #将图上元素清空

所有的构建复杂网络图的操作基本都围绕这个g来执行。

2. 节点

节点的名字可以是任意数据类型的,添加一个节点是

g.add_node(1)

g.add_node("a")

g.add_node("spam")

添加一组节点,就是提前构建好了一个节点列表,将其一次性加进来,这跟后边加边的操作是具有一致性的。

g.add_nodes_from([2,3])

or

a = [2,3]

g.add_nodes_from(a)

这里需要值得注意的一点是,对于add_node加一个点来说,字符串是只添加了名字为整个字符串的节点。但是对于

add_nodes_from加一组点来说,字符串表示了添加了每一个字符都代表的多个节点,exp:

g.add_node("spam") #添加了一个名为spam的节点

g.add_nodes_from("spam") #添加了4个节点,名为s,p,a,m

g.nodes() #可以将以上5个节点打印出来看看

加一组从0开始的连续数字的节点

H = nx.path_graph(10)

g.add_nodes_from(H) #将0~9加入了节点

#但请勿使用g.add_node(H)

删除节点

与添加节点同理

g.remove_node(node_name)

g.remove_nodes_from(nodes_list)

3. 边

边是由对应节点的名字的元组组成,加一条边

g.add_edge(1,2)

e = (2,3)

g.add_edge(*e) #直接g.add_edge(e)数据类型不对,*是将元组中的元素取出

加一组边

g.add_edges_from([(1,2),(1,3)])

g.add_edges_from([("a","spam") , ("a",2)])

通过nx.path_graph(n)加一系列连续的边

n = 10

H = nx.path_graph(n)

g.add_edges_from(H.edges()) #添加了0~1,1~2 ... n-2~n-1这样的n-1条连续的边

删除边

同理添加边的操作

g.remove_edge(edge)

g.remove_edges_from(edges_list)

4. 查看图上点和边的信息

g.number_of_nodes() #查看点的数量

g.number_of_edges() #查看边的数量

g.nodes() #返回所有点的信息(list)

g.edges() #返回所有边的信息(list中每个元素是一个tuple)

g.neighbors(1) #所有与1这个点相连的点的信息以列表的形式返回

g[1] #查看所有与1相连的边的属性,格式输出:{0: {}, 2: {}} 表示1和0相连的边没有设置任何属性(也就是{}没有信息),同理1和2相连的边也没有任何属性

method

explanation

Return True if the graph contains the node n.

Return True if n is a node, False otherwise.

Return True if the edge (u,v) is in the graph.

Return the number of nodes in the graph.

Return the number of nodes in the graph.

Return the number of nodes.

Graph.degree([nbunch, weight])

Return the degree of a node or nodes.

Graph.degree_iter([nbunch, weight])

Return an iterator for (node, degree).

Graph.size([weight])

Return the number of edges.

Return the number of edges between two nodes.

Return a list of nodes with self loops.

Return a list of selfloop edges.

Return the number of selfloop edges.

5. 图的属性设置

为图赋予初始属性

g = nx.Graph(day="Monday")

g.graph # {'day': 'Monday'}

修改图的属性

g.graph['day'] = 'Tuesday'

g.graph # {'day': 'Tuesday'}

6. 点的属性设置

g.add_node('benz', money=10000, fuel="1.5L")

print g.node['benz'] # {'fuel': '1.5L', 'money': 10000}

print g.node['benz']['money'] # 10000

print g.nodes(data=True) # data默认false就是不输出属性信息,修改为true,会将节点名字和属性信息一起输出

7. 边的属性设置

通过上文中对g[1]的介绍可知边的属性在{}中显示出来,我们可以根据这个秀改变的属性

g.clear()

n = 10

H = nx.path_graph(n)

g.add_nodes_from(H)

g.add_edges_from(H.edges())

g[1][2]['color'] = 'blue'

g.add_edge(1, 2, weight=4.7)

g.add_edges_from([(3,4),(4,5)], color='red')

g.add_edges_from([(1,2,{'color':'blue'}), (2,3,{'weight':8})])

g[1][2]['weight'] = 4.7

g.edge[1][2]['weight'] = 4

8. 不同类型的图(有向图Directed graphs , 重边图 Multigraphs)

Directed graphs

DG = nx.DiGraph()

DG.add_weighted_edges_from([(1,2,0.5), (3,1,0.75), (1,4,0.3)]) # 添加带权值的边

print DG.out_degree(1) # 打印结果:2 表示:找到1的出度

print DG.out_degree(1, weight='weight') # 打印结果:0.8 表示:从1出去的边的权值和,这里权值是以weight属性值作为标准,如果你有一个money属性,那么也可以修改为weight='money',那么结果就是对money求和了

print DG.successors(1) # [2,4] 表示1的后继节点有2和4

print DG.predecessors(1) # [3] 表示只有一个节点3有指向1的连边

Multigraphs

简答从字面上理解就是这种复杂网络图允许你相同节点之间允许出现重边

MG=nx.MultiGraph()

MG.add_weighted_edges_from([(1,2,.5), (1,2,.75), (2,3,.5)])

print MG.degree(weight='weight') # {1: 1.25, 2: 1.75, 3: 0.5}

GG=nx.Graph()

for n,nbrs in MG.adjacency_iter():

for nbr,edict in nbrs.items():

minvalue=min([d['weight'] for d in edict.values()])

GG.add_edge(n,nbr, weight = minvalue)

print nx.shortest_path(GG,1,3) # [1, 2, 3]

9. 图的遍历

g = nx.Graph()

g.add_weighted_edges_from([(1,2,0.125),(1,3,0.75),(2,4,1.2),(3,4,0.375)])

for n,nbrs in g.adjacency_iter(): #n表示每一个起始点,nbrs是一个字典,字典中的每一个元素包含了这个起始点连接的点和这两个点连边对应的属性

print n, nbrs

for nbr,eattr in nbrs.items():

# nbr表示跟n连接的点,eattr表示这两个点连边的属性集合,这里只设置了weight,如果你还设置了color,那么就可以通过eattr['color']访问到对应的color元素

data=eattr['weight']

if data<0.5: print('(%d, %d, %.3f)' % (n,nbr,data))

10. 图生成和图上的一些操作

下方的这些操作都是在networkx包内的方法

subgraph(G, nbunch) - induce subgraph of G on nodes in nbunch

union(G1,G2) - graph union

disjoint_union(G1,G2) - graph union assuming all nodes are different

cartesian_product(G1,G2) - return Cartesian product graph

compose(G1,G2) - combine graphs identifying nodes common to both

complement(G) - graph complement

create_empty_copy(G) - return an empty copy of the same graph class

convert_to_undirected(G) - return an undirected representation of G

convert_to_directed(G) - return a directed representation of G

11. 图上分析

g = nx.Graph()

g.add_edges_from([(1,2), (1,3)])

g.add_node("spam")

nx.connected_components(g) # [[1, 2, 3], ['spam']] 表示返回g上的不同连通块

sorted(nx.degree(g).values())

通过构建权值图,可以直接快速利用dijkstra_path()接口计算最短路程

>>> G=nx.Graph()

>>> e=[('a','b',0.3),('b','c',0.9),('a','c',0.5),('c','d',1.2)]

>>> G.add_weighted_edges_from(e)

>>> print(nx.dijkstra_path(G,'a','d'))

['a', 'c', 'd']

12. 图的绘制

下面是4种图的构造方法,选择其中一个

nx.draw(g)

nx.draw_random(g) #点随机分布

nx.draw_circular(g) #点的分布形成一个环

nx.draw_spectral(g)

最后将图形表现出来

import matplotlib.pyplot as plt

plt.show()

将图片保存到下来

nx.draw(g)

plt.savefig("path.png")

修改节点颜色,边的颜色

g = nx.cubical_graph()

nx.draw(g, pos=nx.spectral_layout(g), nodecolor='r', edge_color='b')

plt.show()

13. 图形种类的选择

Graph Type

NetworkX Class

简单无向图

Graph()

简单有向图

DiGraph()

有自环

Grap(),DiGraph()

有重边

MultiGraph(), MultiDiGraph()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

用python画关系网络图-python networkx 包绘制复杂网络关系图的实现相关推荐

  1. python绘制社会关系网络图_python networkx 包绘制复杂网络关系图的实现

    1. 创建一个图 import networkx as nx g = nx.Graph() g.clear() #将图上元素清空 所有的构建复杂网络图的操作基本都围绕这个g来执行. 2. 节点 节点的 ...

  2. 用python画关系网络图-python networkx 包绘制复杂网络关系图

    目录 创建一个图 节点 边 查看图上点和边的信息 图的属性设置 点的属性设置 边的属性设置 不同类型的图(有向图Directed graphs , 重边图 Multigraphs) 图的遍历 图生成和 ...

  3. 用python画关系网络图-使用python画社交网络图实例代码

    在图书馆的检索系统中,关于图书的信息里面有一个是图书相关借阅关系图.跟这个社交网络图是一样的,反映了不同对象间的关联性. 利用python画社交网络图使用的库是 networkx,更多关于networ ...

  4. python代码画人物_使用python画社交网络图实例代码

    在图书馆的检索系统中,关于图书的信息里面有一个是图书相关借阅关系图.跟这个社交网络图是一样的,反映了不同对象间的关联性. 利用python画社交网络图使用的库是 networkx,更多关于networ ...

  5. 数据可视化——R语言ggplot2包绘制相关矩阵为热图

    数据可视化--R语言ggplot2包绘制相关矩阵为热图 概述:R语言软件和数据可视化--ggplot2快速绘制相关矩阵为热图.本文翻译了一篇英文博客,博客原文链接:http://www.sthda.c ...

  6. 数据可视化——R语言ggplot2包绘制精美的小提琴图(并箱线图或误差条图组合)

    数据可视化--R语言ggplot2包绘制精美的小提琴图(并箱线图或误差条图组合) 概述:R语言使用ggplot2工具包绘制小提琴图.为了使数据表达更加丰富,同时将小提琴图与箱线图和误差条图相结合.另外 ...

  7. python绘制社会关系网络图_文本分析之制作网络关系图——Python

    今天给大家带来我一个脚本,用来分析社会网络关系. 这个图我没有用到gephi或者其他的工具,是我用python纯脚本运行出来的.简单的实现了封装,大家有兴趣可以下载下脚本,运行下. 原理知识 我就简单 ...

  8. Python什么都能做(二)用Python画微信新出的表情包

    11月18日,微信团队又推出了六张全新的小表情,可爱而有趣的表情瞬间火爆了大家的微信好友圈,也毫无疑问的登上了微博热搜榜的首位.各大明星纷纷效仿表情包,引发了一波全民的娱乐小高潮. 腾讯推出的新表情包 ...

  9. python绘制人际关系图_干货!利用Python绘制精美网络关系图

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨tan45du 来源丨袁厨的算法小屋(ID:t ...

最新文章

  1. Java管理Cookie增删改查操作
  2. Spring 自定义注解使用案例 首先创建一个注解@interface
  3. Filezilla-使用ssh连接到服务器-上传下载文件
  4. 2017\National _C_C++_C\4.小数第n位
  5. Django2.+ path配置
  6. mysqlsql怎么比较当前月与去年的这个月的同比_多数房企前10月业绩稳步增长 这12家企业为何“负增长”?...
  7. 图论--LCA--树上倍增法(在线)
  8. 【计蒜客 - 蓝桥训练】欧拉函数(数学,数论,模板)
  9. 未来计算机是否有意识或者人为的赋予意识,人工智能会有自我意识吗?
  10. 我们应聘BAT等互联网公司,关于Spring到底需要掌握什么?
  11. 数据密集型应用系统设计--数据分区
  12. oracle返回当前日期函数,oracle 日期时间函数使用总结
  13. Spring常用设计模式--抽象工厂模式
  14. 一个计算机能插两块显卡吗,双显卡有什么好处(一台电脑安装两张不同的显卡)...
  15. Python基础-Python中列表的使用
  16. springboot2 druid监控控制台去掉下面的图片广告和powered by
  17. 科技型中小企业申报时间?
  18. win10中用命令行打开画图
  19. 删除用户:userdel
  20. C++中容器的分类以及相关用法

热门文章

  1. Matlab 模拟退火算法模型代码
  2. 优秀的博客与文章总结链接地址
  3. Netty 私有协议栈 代码实现
  4. coursera—吴恩达Machine Learning笔记(1-3周)
  5. FMS4.5( Adobe Flash Media Server4.5)流媒体服务器搭建
  6. 【Java 线程的深入研究3】最简单实例说明wait、notify、notifyAll的使用方法
  7. 极其好用好学的规则引擎 - A2D规则引擎
  8. python 仪表盘-python仪表盘
  9. python精通-干货|Python学习必须精通的几个模块
  10. python处理数据的优势-【Python数据分析基础】: 数据缺失值处理