Python学习系列二十五数据结构-有向图绘制

Posted fjssharpsword

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习系列二十五数据结构-有向图绘制相关的知识,希望对你有一定的参考价值。

1、场景:从文件中读取节点、有向边,然后绘制。

2、参考代码:

# -*- coding: utf-8 -*-

import networkx as nx
import matplotlib.pyplot as plt

#读取文件,获取节点和边
f = open("D:\\\\tmp\\\\gy_contest_link_top.txt", "r")  
nodelist=[]
edgelist=[]
while True:  
    line = f.readline()  
    if line:  
        pass    # do something here 
        line=line.strip()
        node=line.split(';')[0]#获取图节点
        nodelist.append(node)
        in_nodes=line.split(';')[1].split('#')#获取图边,该节点是终点
        for ins in range( len(in_nodes) ) :
            if in_nodes[ins].strip() !='': 
                in_edge=(in_nodes[ins],node)
                if in_edge not in edgelist:
                    edgelist.append(in_edge)
        out_nodes=line.split(';')[2].split('#')#获取图边,该节点是起点  
        for ins in range( len(out_nodes) ) :
            if out_nodes[ins].strip() !='': 
                out_edge=(node,out_nodes[ins])
                if out_edge not in edgelist:
                    edgelist.append(out_edge)
    else:  
        break
f.close()
del nodelist[0] #删除表头生成的节点
del edgelist[0]
del edgelist[0] #删除表头生成的边
#print len(nodelist) #图节点
#print len(edgelist) #边数

#有向图绘制
G=nx.DiGraph()
G.add_nodes_from(nodelist)
G.add_edges_from(edgelist)
nx.draw_networkx(G, pos=None, arrows=True, with_labels=True)
#plt.savefig('D:\\\\tmp\\\\it.png')
plt.show()

效果图:


笔者没有对节点名做简易处理,所以看起来有点乱。


以上是关于Python学习系列二十五数据结构-有向图绘制的主要内容,如果未能解决你的问题,请参考以下文章

Python学习第二十五课——Mysql (多表查询)

机器学习100天(二十五):025 L2正则化的Python实现

机器学习100天(二十五):025 L2正则化的Python实现

机器学习100天(二十五):025 L2正则化的Python实现

Python学习笔记(二十五)操作文件和目录

python学习手册:第二十五章——oop