1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python绘制人际关系图_干货!利用Python绘制精美网络关系图

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

时间:2019-11-26 19:31:57

相关推荐

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

Python实战社群

Java实战社群

长按识别下方二维码,按需求添加

扫码关注添加客服

进Python社群▲

扫码关注添加客服

进Java社群▲

作者丨tan45du

来源丨袁厨的算法小屋(ID:tan45du_me)

最近发现一个特别好用的python库,能够绘制精美的关系图,俗话说有好东西要学会分享,所以袁厨就肝了这篇文章,大家可以参考一下。

一、概述

NetworkX是一个用python编写的软件包,便于用户对复杂网络进行创建、操作和学习。

利用networkx可以以标准化和非标准化的数据格式存储网络、生成多种随机网络和经典网络、分析网络结构、建立网络模型、设计新的网络算法、进行网络绘制等,Networkx主要用于创造、操作复杂网络,以及学习复杂网络的结构、动力学及其功能。我们用它可以将存储在邻接表或邻接矩阵里的网络图可视化。下面给大家看一下我自己画的一个例子吧。这样就大概可以了解怎么回事了。

小世界网络图

上面这张图片是我绘制的社交关系图,其中蓝色节点代表的是度最高的节点,就是社交关系最复杂的节点。

二、NetWorkx安装

安装方式主要有三种

1.命令行pip

2.pycharm安装

3.官方下载whl文件进行安装

下面我给大家介绍最简单方便的第一种方式吧

1.win+r进入命令行界面

在这里插入图片描述

2.输入安装代码

pipinstallnetworkx-i/simple--trusted-

这里更换了豆瓣的镜像源。可以提高下载速度。安装其他包的时候,将networkx改成其他包名即可。

三、NetworkX基础知识

1.创建图

首先我们需要创建一个没有边和节点的图形,说白了就是先拿出一张白纸,我们准备在白纸上作画了。

importnetworkxasnx

G=nx.Graph()#无多重边无向图

G=nx.DiGraph()#无多重边有向图

G=nx.MultiGraph()#有多重边无向图

G=nx.MultiDiGraph()#有多重边有向图

可以创建四种图形,无多重边无向图、无多重边有向图、有多重边无向图、有多重边有向图。常用的就是第一种图了

2.添加节点

这一步的作用就是在图中添加节点,我们可以一次添加一个节点,也可以添加一个节点列表

G.add_node(1)#添加节点1

G.add_nodes_from([2,3])#添加节点2,3

两个命令是不一样的需要注意一下哦

3.添加边

当然边也可以单个添加和多个添加

G.add_edge('x','y')#添加一条边起点为x,终点为y

G.add_edges_from([(1,2),(1,3),(2,3)])#添加多条边

下面我们来看一下当前效果

importnetworkxasnx

importmatplotlib.pyplotasplt

G=nx.Graph()#无多重边无向图

G.add_node(1)#添加节点1

G.add_nodes_from([2,3])#添加节点2,3

G.add_nodes_from([2,3,4,5,6])#添加节点2,3

G.add_edge('x','y')#添加一条边起点为x,终点为y

G.add_edges_from([(1,2),(4,5),(5,6),(2,4)]);

G.add_edges_from([(1,2),(1,3),(2,3)])#添加多条边

nx.draw(G,with_labels=True);

plt.show()

4.给图中的节点和边添加属性

运行样式:

-`node_size`:指定节点的尺寸大小(默认是300)

-`node_color`:指定节点的颜色(默认是红色,可以用字符串简单标识颜色,例如'r'为红色,'b'为绿色等)

-`node_shape`:节点的形状(默认是圆形,用字符串'o'标识)

-`alpha`:透明度(默认是1.0,不透明,0为完全透明)

-`width`:边的宽度(默认为1.0)

-`edge_color`:边的颜色(默认为黑色)

-`style`:边的样式(默认为实现,可选:solid|dashed|dotted,dashdot)

-`with_labels`:节点是否带标签(默认为True)

-`font_size`:节点标签字体大小(默认为12)

-`font_color`:节点标签字体颜色(默认为黑色)

-`pos`:布局

运用布局:

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

random_layout:节点随机分布

shell_layout:节点在同心圆上分布

spring_layout:用Fruchterman-Reingold算法排列节点(样子类似多中心放射状)

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

我们需要在nx.draw这行代码里面添加属性。

下面我们来使用一下这些属性,看看会有什么效果。

添加节点属性

importnetworkxasnx

importmatplotlib.pyplotasplt

G=nx.Graph()#无多重边无向图

G.add_nodes_from([1,2,3,4,5,6])#添加节点2,3

G.add_edges_from([(1,2),(4,5),(5,6),(2,4),(1,3),(2,4)]);

nx.draw(G,with_labels=True,node_size=200,node_color='#7FFF00')#在这里添加属性,添加颜色和大小

plt.show()

添加布局属性

pos=nx.shell_layout(G)

nx.draw(G,with_labels=True,node_size=200,node_color='#7FFF00',pos=pos)

importnetworkxasnx

importmatplotlib.pyplotasplt

G=nx.Graph()#无多重边无向图

G.add_nodes_from([1,2,3,4,5,6,7,8,9,10])#添加节点2,3

G.add_edges_from([(1,2),(4,5),(5,6),(2,4),(1,3),(2,4),(3,6),(3,7),(4,8),(5,9),(7,10),(1,10)]);

pos=nx.shell_layout(G)

nx.draw(G,with_labels=True,node_size=200,node_color='#7FFF00',pos=pos)

plt.show()

我们刚才用的属性是节点在同心圆上分布,效果如上图。还有其他分布方式大家可以试一下。

给节点添加不同的颜色

importnetworkxasnx

importmatplotlib.pyplotasplt

G=nx.Graph()#无多重边无向图

G.add_edges_from([(1,2),(2,3),(3,4),(4,1)]);

color=['#7FFF00','#0000ff','#9999ff','#ff00ff']

pos=nx.shell_layout(G)

nx.draw(G,with_labels=True,node_size=200,node_color=color,pos=pos)

plt.show()

不同节点不同颜色

我们还可以给每个节点设置不同的颜色。当然大小也可以,这里自由发挥就好了。

5.样例实现

我们用了两种不同的节点分布方式,效果如下。

importnetworkxasnx

importmatplotlib.pyplotasplt

net_grid=nx.Graph()

#nodes

list_net_nodes=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]

#edges

list_net_edges=[(1,3),(3,5),(5,4),(4,2),(2,6),

(5,7),(5,8),(8,6),

(7,9),(8,9),(6,10),

(9,11),(10,12),(10,13),

(11,14),(12,14),(12,15),

(14,16),(15,16),(15,17),

(16,18),(17,19),(12,2),(12,1),

(18,20),(19,7),(19,2),(19,1),(19,5)]

net_grid.add_nodes_from(list_net_nodes)

net_grid.add_edges_from(list_net_edges)

pos=nx.random_layout(net_grid)#随机分布

nx.draw_networkx_nodes(net_grid,pos=pos,node_color='#ff0000',node_size=200,alpha=0.6)#点的样式

nx.draw_networkx_edges(net_grid,pos=pos,width=0.5,alpha=0.4)#边的样式

plt.show()

学到这里基本的图就会画了,下面学习一下通过数据集进行绘制绘制网络图

6.导入数据进行绘图

利用football数据集绘制社交关系图,

importnetworkxasnx

importmatplotlib.pyplotasplt

net_grid=nx.Graph()

#构建函数,提取出数据集里的边和点

defread_gml(data):

H=nx.read_gml(data)

nodedata=H.nodes;

eagedata=H.edges;

returnnodedata,eagedata

#引用函数得到边和点

(nodeums,edgesnum)=read_gml('football.gml')

net_grid.add_nodes_from(nodeums)

net_grid.add_edges_from(edgesnum)

pos=nx.random_layout(net_grid)#随机分布图

nx.draw_networkx_nodes(net_grid,pos=pos,node_color='#7FFF00',node_size=150,alpha=0.7)#点的样式

nx.draw_networkx_edges(net_grid,pos=pos,width=0.3,alpha=0.2)#边的样式

plt.show()

上面三张图片是利用不同的排列方式进行排列的。Networkx还有很多强大的功能,大家可以继续深挖,这里为大家提供一个入门参考,感谢大家的支持。如果大家感觉Networkx不能满足大家的需求,绘制网络图的python库还有DGL,PyG。

如果大家需要可以后台回复【绘图】,获取数据集和代码

程序员专栏扫码关注填加客服长按识别下方二维码进群

近期精彩内容推荐:

在看点这里好文分享给更多人↓↓

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。