Python之networkx绘制网络图
目录
1.创建指定的网络图
2.添加结点(node)、边(edge)、权重(weight)
3.设置图的位置
4.绘图
5.输出邻接矩阵
本文需要用到的库有:networkx,pylab
1.创建指定的网络图
图的类型 |
对应代码 |
3正则图 |
G=nx.cubical_graph() |
无向图 |
G=nx.Graph() |
有向图 |
G=nx.DiGraph() |
多重无向图 | G=nx.MultiGraph() |
多重有向图 | G=nx.MultiDiGraph() |
1.1 利用邻接矩阵来创建图
在以上代码的括号内放入对应的邻接矩阵即可
例如:
G=nx.Graph(W) # W是邻接矩阵
如果 括号内不放入邻接矩阵,那么会创建一个空对象,需要利用下面的方法向图中添加属性
2.添加结点(node)、边(edge)、权重(weight)
2.1添加结点(node)
添加结点的方式 | 例子 | 对应代码 |
添加单个结点:直接在括号内填编号 | 添加编号为1的结点 |
|
添加多个结点:在括号内放入列表 | 添加编号为A、B的结点 |
|
添加编号为1~7的结点 |
|
2.2添加边(edge)
添加边的方式 | 例子 | 对应代码 |
添加1条边:直接在括号内填两个结点名称 | 在A、B之间加1条边 |
|
添加多条边:在括号内放入列表 | 添加list中的边 |
|
2.3添加权重(weight)
注意:权重一般不会单独添加,而是与对应的边一起同时添加
因此,添加权重的本质是:添加有权重的边
添加有权重的边的方式 | 例子 | 对应代码 |
添加1条有权重的边:直接把两个结点、权重写在括号内 |
添加结点1、2之间一条权重为0.5的边 |
|
添加多条有权重的边:用列表 | 添加list中的赋权边 |
|
2.4总结:
无论是添加结点、边、权重,都有:
如果添加1个,则直接写在括号内;
如果添加多个,则先写在列表里,再放进括号内
3.设置图的位置、字体、标题等
注意:首先要引入库pylab
import pylab as plt
plt.subplot(221) # 设置图的位置
plt.rc("font",size=16) # 设置图的字体
plt.title("My title") # 设置图的标题
4.绘图
4.1使用函数nx.draw(G,pos,ax,kwds)
参数解读:
G:所创建的图 pos:布局方式
布局方式 对应代码 结点在1个圆环上均匀分布 nx.circular_layout(G) 结点在1个单位正方形内随机分布 nx.random_layout(G) 结点在多个同心圆上分布 nx.shell_layout(G) 结点按Fruchterman-Reingold算法分布 nx.spring_layout(G) 结点根据图的拉普拉斯特征向量分布 nx.spectral_layout(G) labels:
可以自行以字典形式设置标记with_labels=True/False:
with_labels=True
若在创建图时没有标记,则系统自动添加标记为0~n-1 (n为结点个数)
若在创建图时有标记,则显示这些已有的标记
with_labels=False
不显示标记node_color:结点颜色 node_shape:结点形状 edge_color:边的颜色
例子:
mark=['v'+str(i) for i in range(1,9)]
mark=dict(zip(range(8),mark))
nx.draw(G,
pos=nx.circular_layout(G), # 排布方式
labels=mark, # 标记(字典格式)
node_color='y', # 结点颜色
node_shape='s', # 结点形状
edge_color='b') # 边的颜色
4.2使用函数nx.draw_networkx_edge_labels()为边添加标记
参数解读:
G:所创建的图 pos:布局方式。具体同上 edge_labels:边的标记(以列表的形式)
一般用途:用于标出边的权重
在此之前,要先利用函数nx.get_edge_attributes() 获取边的权重
例子:
weight=nx.get_edge_attributes(G,"weight") # 获取每条边的权重
nx.draw_networkx_edge_labels(G,pos=nx.shell_layout(G),edge_labels=weight) # 标出边的权重
4.3使用函数nx.draw_networkx_edges()标出指定的边
参数解读:
G:所创建的图 pos:布局方式。具体同上 edgelist:以列表形式给出指定的边 edge_color:边的颜色
例子:
nx.draw_networkx_edges(G,
pos=nx.shell_layout(G),
edgelist=path_edges,
edge_color='r')
5.输出邻接矩阵
W=nx.to_numpy_array(G)
作者:whY的笔记