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的结点
    G.add_node(1)   # 添加编号为1的结点

    添加多个结点:在括号内放入列表添加编号为A、B的结点
    G.add_nodes_from(['A','B'])  # 从列表中添加结点

    添加编号为1~7的结点
    G.add_nodes_from(range(1,7))

  • 2.2添加边(edge)

    添加边的方式例子对应代码
    添加1条边:直接在括号内填两个结点名称在A、B之间加1条边
    G.add_edge('A','B') 

    添加多条边:在括号内放入列表添加list中的边
    list=[(1,2),(1,3),(2,3),
    (3,2),(3,5),(4,2),
    (4,6),(5,2),(5,4),
    (6,5)]
    
    G.add_edges_from(list)

  • 2.3添加权重(weight)

    注意:权重一般不会单独添加,而是与对应的边一起同时添加

    因此,添加权重的本质是:添加有权重的边
    添加有权重的边的方式例子对应代码
    添加1条有权重的边:直接把两个结点、权重写在括号内
    添加结点1、2之间一条权重为0.5的边
    # 添加编号为1、编号为2的结点,并在二者之间加一条权重为0.5的边
    G.add_edge(1,2,weight=0.5)

    添加多条有权重的边:用列表添加list中的赋权边
    list=[('A','B',0.3),('B','C',0.9),('A','C',0.5),('C','D',1.2)]
    G.add_weighted_edges_from(list)  # 从列表中添加多条赋权边

    2.4总结:

无论是添加结点、边、权重,都有:

如果添加1个,则直接写在括号内;

如果添加多个,则先写在列表里,再放进括号内

3.设置图的位置、字体、标题等

注意:首先要引入库pylab

import pylab as plt

plt.subplot(221) # 设置图的位置
plt.rc("font",size=16)  # 设置图的字体
plt.title("My title")  # 设置图的标题

4.绘图

使用函数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')  # 边的颜色

5.输出邻接矩阵

W=nx.to_numpy_array(G) 

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值