python networkx库简单讲解

1.下载networkx

pip install networkx

2.networkx简介

network可以用来画节点图,这里介绍如何使用networkx来画知识图谱

3.networkx的简单使用

创建图

networkx内置了多种图对象。

主要是这四种

Graph:无多重边无向图

DiGraph:无多重边有向图

MultiGraph:有多重边无向图

MultiDiGraph:有多重边有向图

创建图的方式

from nework import *

G=DiGraph()#有向图
G=MultiDiGraph()#多重有向图

图上点的布局

布局方法一般有这五种

circular_layout:节点在一个圆环上均匀分布

random_layout:节点随机分布

shell_layout:节点在同心圆上分布

spring_layout:用Fruchterman-Reingold算法排列节点,中心放射状分布

spectral_layout:根据图的拉普拉斯特征向量排列节点

最好的可能是spring_layout

添加布局的方法

pos=nx.spring_layout(self.graph)#建立布局对象
#再在draw时传入
draw(...,pos=pos,...)

4.节点操作

添加节点

添加节点有两种方法

self.G.add_node(节点名,节点属性=值....)
#节点名只有一个节点属性可以有很多,节点的label默认是节点名
#节点的属性就只是属性,没有太多实际意义
self.G.add_nodes_from([节点名列表])
#如[1,2,3,4],那就添加4个节点,分别是1节点,2节点,3节点,4节点。

对于add_nodes_from(),可以这样用

self.G.add_nodes_from([(1,{color:"red"}),(2,{size:123})])
#参数是一个集合,集合内一个节点用一个元组,元组的第一个属性是节点名,
#第二个属性是一个字典,用来指定节点的属性,但这个属性只是属性,
#没有实际意义,如color不会改变节点的颜色,size不会改变节点大小。

获得图的节点个数和节点列表

num=self.G.number_of_nodes()#获取图的节点数量
node_list=self.G.nodes()#获取节点的列表

#显示
#2
#[1,2]

删除节点

self.G.remove_node(1) #删除指定节点
self.G.remove_nodes_from(['b','c','d','e']) #删除集合中的节点

5.边缘操作

添加边

注意在添加边时如果没有这个点,它会新添加这两个点,再连线,后续画图的时候有可能会出现问题。

self.G.add_edge(起点,终点,边缘属性=值...)
#有向图会考虑起点终点,无向图把这两个点直接连接就行。
self.G.add_edges_from([(起点1,终点1),(起点2,终点2)])
#也可以直接按列表添加
#add_edges_from()也可以添加属性
self.G.add_edges_from([(起点1,终点1,{color="red"}),(起点1,终点1,{size=11,边缘属性=值})])

获得边缘的个数和边缘列表

self.G.number_of_edges()#获得G的边的个数
self.G.edges()#获得边的列表

删除边

self.G.remove_edge(1,2) #删除边
self.G.remove_edges_from([(11,12), (13,14)])#删除边列表

6.画图

布局

pos=nx.spring_layout(self.graph)#建立布局对象

画图

draw_networkx_nodes(self.G, pos, node_size=list,alpha=0.3, node_color=list)
#专门只画节点,第一个参数是图对象,第二个是布局,
#后面用key=value的形式可以设置节点的node_size,node_color.
#这两个的value可以是一个定值也可以是一个列表,列表里的元素的个数要和节点个数一样。
draw_networkx_nodes(G, pos, nodelist=None, node_size=300, node_color='#1f78b4', node_shape='o', alpha=None,cmap=None,vmin=None, vmax=None, ax=None, linewidths=None, edgecolors=None, label=None, **kwds)

draw_networkx_edges(G, pos, edgelist=None, width=1.0, edge_color='k', style='solid', alpha=None, arrowstyle='-|>', arrowsize=10,edge_cmap=None, edge_vmin=None, edge_vmax=None, ax=None, arrows=True, label=None, node_size=300, nodelist=None,node_shape='o', connectionstyle=None, min_source_margin=0, min_target_margin=0, **kwds)
#value可以是值,也可以是[]
#专门画边缘
draw_networkx_labels(G, pos, labels=None, font_size=12, font_color='k', font_family='sans-serif', font_weight='normal',alpha=None, bbox=None, ax=None, **kwds)

#只画图标签
draw_networkx_labels(G, pos, labels=None, font_size=12, font_color='k', font_family='sans-serif', font_weight='normal',alpha=None, bbox=None, ax=None, **kwds)
#只画边标签

这些里面一定要有的参数是G和pos,alpha是透明度,cmap是颜色映射,其他的按需画图就行。

还有一个总画图函数

draw(slef.G,pos,key=value)
#会把图都画出来

这是画图的整体代码

import matplotlib.pyplot as plt
plt.figure(figsize=(19.2,16.8))
nx.draw(self.graph,pos,with_labels=True,node_size=size_list,node_color=color_list,labels=lables_list,font_size=13)
nx.draw_networkx_edge_labels(self.graph,pos,edge_labels=edge_label,font_size=20)
plt.show()
#记得要用matplotlib.pyplot创建窗口,并用show()显示

当label是中文

from pylab import mpl
mpl.rcParams["font.sans-serif"] = ["SimHei"]
#当label是中文时可能显示不出来,这时候在画图前加入这行代码,就可以正常显示了

7.保存

import matplotlib.pyplot as plt

plt.savefig(r'picture/{}.png'.format(timestr))
#记得要在show()之前保存,不然只会保存白板

  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值