前言
工作需要将各个类之间的关系用网络图描述出来。
查阅相关资料,主要有如下方式:
networkx
qtgraph
matplotlib
一、networkx
networkx是用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。
本文主要实现用networkx画有向图,检测是否有回环,每个节点的前节点、后节点。
本文这里已经封装好了相关的实现类。
# -*- coding:utf-8 -*-
import networkx as nx
import matplotlib.pyplot as plt
import copy
from networkx.algorithms.cycles import *
class GetGraph:
def __init__(self):
pass
@staticmethod
def create_directed_graph(data_dict):
my_graph = nx.DiGraph()
my_graph.clear()
for front_node, back_node_list in data_dict.items():
if back_node_list:
for back_node in back_node_list:
my_graph.add_edge(front_node, back_node)
else:
my_graph.add_node(front_node)
return my_graph
@staticmethod
def draw_directed_graph(my_graph, name='out'):
nx.draw_networkx(my_graph, pos=nx.circular_layout(my_graph), vmin=10,
vmax=20, width=2, font_size=8, edge_color='black')
picture_name = name + ".png"
plt.savefig(picture_name)
# print(&