Python NetworkX/Community包进行网络划分和可视化

来源:互联网 发布:java中异常发生原因 编辑:程序博客网 时间:2024/05/16 05:14

Whenever people agree with me, i always feel i must be wrong.

每次别人赞同我时,我都觉得自己一定错了。

Python NetworkX/Community包进行网络划分和可视化

networkx 提供画图的函数有:

draw(G,[pos,ax,hold])
draw_networkx(G,[pos,with_labels])
draw_networkx_nodes(G,pos,[nodelist]) 绘制网络G的节点图
draw_networkx_edges(G,pos[edgelist]) 绘制网络G的边图
draw_networkx_edge_labels(G, pos[, …]) 绘制网络G的边图,边有label
—有layout 布局画图函数的分界线—
draw_circular(G, **kwargs) Draw the graph G with a circular layout.
draw_random(G, **kwargs) Draw the graph G with a random layout.
draw_spectral(G, **kwargs) Draw the graph G with a spectral layout.
draw_spring(G, **kwargs) Draw the graph G with a spring layout.
draw_shell(G, **kwargs) Draw networkx graph with shell layout.
draw_graphviz(G[, prog]) Draw networkx graph with graphviz layout.

networkx 画图参数:
- node_size: 指定节点的尺寸大小(默认是300,单位未知,就是上图中那么大的点)
- node_color: 指定节点的颜色 (默认是红色,可以用字符串简单标识颜色,例如’r’为红色,’b’为绿色等,具体可查看手册),用“数据字典”赋值的时候必须对字典取值(.values())后再赋值
- 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: 节点标签字体颜色(默认为黑色)
e.g. nx.draw(G,node_size = 30, with_label = False)
绘制节点的尺寸为30,不带标签的网络图。

布局指定节点排列形式

pos = nx.spring_layout
建立布局,对图进行布局美化,networkx 提供的布局方式有:
- circular_layout:节点在一个圆环上均匀分布
- random_layout:节点随机分布
- shell_layout:节点在同心圆上分布
- spring_layout: 用Fruchterman-Reingold算法排列节点(这个算法我不了解,样子类似多中心放射状)
- spectral_layout:根据图的拉普拉斯特征向量排列节
布局也可用pos参数指定,例如,nx.draw(G, pos = spring_layout(G)) 这样指定了networkx上以中心放射状分布.

NetworkX绘制简单的图像:

# -*- coding:utf-8 -*-'''Created on 2017年9月24日@summary: Network包调用方法@author: dreamhome'''import communityimport matplotlib.pyplot as pltimport networkx as nxpath="/home/dreamhome/network-datasets/football/football.gml"Graph=nx.read_gml(path)#输出图信息print Graph.graph#输出节点信息print Graph.nodes(data=True)#输出边信息print Graph.edges()#计算图或网络的传递性print nx.transitivity(Graph)#节点个数print Graph.number_of_nodes()#边数print Graph.number_of_edges()#节点邻居的个数print Graph.neighbors(1)# 图划分part = community.best_partition(Graph)print part#计算模块度mod = community.modularity(part,Graph)print mod#绘图values = [part.get(node) for node in Graph.nodes()]nx.draw_spring(Graph, cmap=plt.get_cmap('jet'), node_color = values, node_size=30, with_labels=False)plt.show()

网络划分图像如下:
这里写图片描述

阅读全文
0 0