使用networkx绘制带节点坐标图(节点、节点坐标和边)

首先导入需要的工具包

import matplotlib.pyplot as plt
import networkx as nx
import numpy as np  

使用networkx创建一个空的无向图

G = nx.Graph()  # 创建一个空的无向图

将对应的节点并添加到网络中

# 节点的个数
num = 6
nodes = list(range(num))  # [0,1,2,3,4,5]
# 将节点添加到网络中
G.add_nodes_from(nodes)  # 从列表中加点

将节点相关的边加入网络

edges = []  # 存放所有的边,构成无向图(去掉最后一个结点,构成一个环)
for idx in range(num - 1):
    edges.append((idx, idx + 1))
edges.append((num - 1, 0))

#  将所有边加入网络
G.add_edges_from(edges)

绘制图像:

nx.draw_networkx(G)

未加入坐标与节点映射的图像如下:
使用networkx绘制带节点坐标图(节点、节点坐标和边)_第1张图片
使用numpy工具来格式化数据

# 每个节点对应坐标坐标
coordinates = [[1, 2], [2, 2], [3, 2], [3, 1], [2, 1], [1, 1]]
# 可导入自己所需的数据
# np.loadtxt()
vnode= np.array(coordinates)
npos = dict(zip(nodes, vnode))  # 获取节点与坐标之间的映射关系,用字典表示
 # 若显示多个图,可将所有节点放入该列表中
# pos = {} 
# pos.update(npos)
nlabels = dict(zip(nodes, nodes))  # 标志字典,构建节点与标识点之间的关系

绘制节点、边和标签的函数如下:

draw_networkx_nodes(G, pos, nodelist=None,node_size=300,node_color='r',node_shape='o',                    alpha=1.0,cmap=None,vmin=None,vmax=None,ax=None,linewidths=None,label=None,**kwds):
draw_networkx_edges(G, pos, edgelist=None, width=1.0, edge_color='k', style='solid', alpha=1.0, edge_cmap=None, edge_vmin=None, edge_vmax=None, ax=None, arrows=True, label=None, **kwds)
draw_networkx_labels(G, pos, labels=None, font_size=12, font_color='k', font_family='sans-serif', font_weight='normal', alpha=1.0, bbox=None, ax=None, **kwds)

绘制所有的节点、边、标签与节点的坐标

nx.draw_networkx_nodes(G, npos, node_size=50, node_color="#6CB6FF")  # 绘制节点
nx.draw_networkx_edges(G, npos, edges)  # 绘制边
nx.draw_networkx_labels(G, npos, nlabels)  # 标签

为了使画出的图坐落在坐标轴中间(进行美化处理)

x_max,y_max = vnode.max(axis=0)  # 获取每一列最大值
x_min, y_min = vnode.min(axis=0)  # 获取每一列最小值
x_num = (x_max - x_min) / 10
y_num = (y_max - y_min) / 10
# print(x_max, y_max, x_min, y_min)
plt.xlim(x_min - x_num, x_max + x_num)
plt.ylim(y_min - y_num, y_max + y_num)

绘制结果如下:

plt.show()

结果如下图:
使用networkx绘制带节点坐标图(节点、节点坐标和边)_第2张图片
------------------------------------------------------------------------------------------------------------------------
坐标轴美化处理之前:
使用networkx绘制带节点坐标图(节点、节点坐标和边)_第3张图片
处理之后:
使用networkx绘制带节点坐标图(节点、节点坐标和边)_第4张图片

你可能感兴趣的:(Networkx,绘图)