目录

创建一个图

节点

查看图上点和边的信息

图的属性设置

点的属性设置

边的属性设置

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

图的遍历

图生成和图上的一些操作

图上分析

图的绘制

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 包绘制复杂网络关系图的实现

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

  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. 火狐访问HTTPS网站显示连接不安全的解决方法
  2. Xamarin iOS教程之警告视图
  3. 消息队列入门(三)JMS标准及实现
  4. LeetCode 2055. 蜡烛之间的盘子(前缀和)
  5. 初探webpack之从零搭建Vue开发环境
  6. [HNOI2006]最短母串问题——AC自动机+状压+bfs环形处理
  7. 【免费毕设】基于PHP的产品报价系统的设计与开发(源代码+论文)
  8. 覆盖索引与联合索引_MySQL:你知道什么是覆盖索引吗?
  9. H5小游戏源码/王了个王消消乐游戏源码带后台
  10. 分析EOF究竟是什么
  11. 使用 spring.profiles.active 及 @profile 注解 动态化配置内部及外部配置
  12. 搬寝室 ----- 动态规划
  13. Android客户端通过TCP接收服务器端发送的数据
  14. 加速汽车行业转型,云计算到底扮演了什么角色?
  15. 火山引擎云原生大数据在金融行业的实践
  16. 【设计灵感】产品设计中的灵感来源于日常生活
  17. 护照身份证识别阅读器
  18. 5分钟通俗易懂了解什么是云存储
  19. 使用C# 实现串口拨号器的SIM卡通信
  20. 2017ACM暑假集训总结

热门文章

  1. image shadow
  2. 考系统架构设计师必看--微内核操作系统
  3. BlogEngine .NET 日期控件显示问题
  4. Vue Router 知识点梳理
  5. 我的java开发规范
  6. ADO.NET入门教程(三) 连接字符串,你小觑了吗?
  7. 3、iOS Xcode创建protocol(代理).h文件
  8. 开始使用Bootstrap
  9. ASP.NET MVC 5 学习教程:添加控制器
  10. supersu二进制更新安装失败_helm安装教程