利用Networkx画图

1、导入数据

需要用到的包

import networkx as nx
import matplotlib.pyplot as plt
import pandas as pd
import xlrd  # 读取excel地铁站点与站名对应信息

外部文件有两个,一个是序号与站名对应的xlsx文件
利用Networkx画图_第1张图片
另一个是网络拓扑数据txt文件

# 用来存放序号和站名的字典
stations = {}
# 读取excel文件的函数
def read_xlrd(excelFile):
    data = xlrd.open_workbook(excelFile)
    table = data.sheet_by_index(0)
    # 按行、列遍历表格
    for rowNum in range(1, table.nrows):
        rowVale = table.row_values(rowNum)
        for colNum in range(table.ncols - 1):
        # 取第0列的值为key,第一列的为values
            if colNum == 1:
                num = rowVale[colNum]
            if colNum == 3:
                station = rowVale[colNum]
        # 存入字典
        stations[num] = station
if __name__ == '__main__':
    excelFile = '.../allsubway.xlsx'# xlsx文件的地址
    read_xlrd(excelFile=excelFile)

2、利用导入节点作图

G = nx.Graph()
nodes = range(1, len(stations.keys()) + 1)
# 导入159个地铁站点
G.add_nodes_from(nodes)

利用字典的键数作为节点数,画图

3、读取边的文件

G.add_nodes_from(nodes)
edges = pd.read_csv('网络拓扑数据.txt', sep=',', header=None)
edge_lists = [tuple(xi) for xi in edges.values]
for edge_list in edge_lists:
    G.add_edge(*edge_list)

这里使用pandas库来进行读取txt文件
利用Networkx画图_第2张图片
简单使用with open读出来的是字符串,而且在未知数字长度的情况下,不方便读取,因此采用pandas来实现
edges是一个datafarm类型,接下来按行,组成列元组,并存入edge_lists列表中
利用for循环,将元组作为边读入

4、画图

nx.draw_networkx(G)
plt.show()

效果图:
利用Networkx画图_第3张图片

你可能感兴趣的:(Python)