结果图:

python转换visio文档 python visio库_数据


局部放大:

python转换visio文档 python visio库_html_02

数据格式:

node:人员

python转换visio文档 python visio库_数据_03


边关系:couple,parent,friend

python转换visio文档 python visio库_python转换visio文档_04

注意事项:

pyvis=0.3.1版本
文件格式.xls (非.xlsx)
pyvis参考文档:https://pyvis.readthedocs.io/en/latest/tutorial.html

代码:

from pyvis.network import Network # pip install pyvis==0.3.1

import xlrd


def load_graph(path):
    g = Network(directed=False)  # 实例化网络图
    # 读取.xls文件(不能是.xlsx文件)
    xlsx = xlrd.open_workbook(path)

    #-------------------------------------------节点部分------------------------------
    # 获取节点
    tab_peo = xlsx.sheet_by_name("People")  # 读取People sheet
    nodesNum = tab_peo.nrows  # 获取该sheet中的有效行数(总人数+1)
    nodes = []
    for i in range (1, nodesNum): # 添加节点,按索引
        nodes.append(i)
    # 设置节点颜色,以某个颜色开始,按照索引顺序,渐变
    color = ['#00ffff']  # 为第一个结点赋予特殊颜色
    for x in range(len(nodes) - 1):
        current_of_color = int(x / len(nodes) * 255 * 2)
        if current_of_color > 255:
            color.append('#%02x%02x%02x' % (255, current_of_color - 255, current_of_color - 255))
        else:
            color.append('#%02x%02x%02x' % (current_of_color, 0, 0))
    # 添加节点(参数:节点列表,标签列表,颜色列表)
    g.add_nodes(nodes,
                label=['G'] * len(nodes),
                color=color)

    # -------------------------------------------边部分------------------------------
    edges = []

    # 添加couple关系
    tab_cp = xlsx.sheet_by_name("couple")  # 根据工作表名字读取excel中的某个表
    rowsNum = tab_cp.nrows  # 获取该sheet中的有效行数
    for i in range (rowsNum): # 遍历行,添加每一行所有单元格的数据内容(边关系)
        edges.append(tab_cp.row_values(i, start_colx=0, end_colx=None))  # 返回由该行中所有单元格的数据组成的列表

    # 添加parent关系
    tab_par = xlsx.sheet_by_name("parent")  # 根据工作表名字读取excel中的某个表
    rowsNum = tab_par.nrows  # 获取该sheet中的有效行数
    for i in range(rowsNum):
        edges.append(tab_par.row_values(i, start_colx=0, end_colx=None))  # 返回由该行中所有单元格的数据组成的列表


    # 添加friend关系
    tab_fri = xlsx.sheet_by_name("friend")  # 根据工作表名字读取excel中的某个表
    rowsNum = tab_fri.nrows  # 获取该sheet中的有效行数
    for i in range(int(rowsNum*0.6)):
        edges.append(tab_fri.row_values(i, start_colx=0, end_colx=None))  # 返回由该行中所有单元格的数据组成的列表

    g.add_edges(edges) # 添加所有边关系(参数:边列表)该函数参数仅为边列表,无颜色等设置项(颜色随节点)

    # -------------------------------------------图展示------------------------------
    return g # 返回图




if __name__ == '__main__':
    crime = '涉恐' # 修改犯罪类型即可
    path = 'C:/Users/DELL/Desktop/构图数据/demo/' + crime + '.xls' # 需要另存为.xls文件,非.xlsx文件
    g = load_graph(path)
    g.show_buttons(filter_=['nodes', 'edges', 'physics']) # 在图展示的html中显示调参按钮
    g.show(crime + 'graph.html', notebook=False) # 图以html形式展示 pyvis=0.3.1(notebook=False)

修改一下,之前以为添加边不能设置颜色。
下面是指定颜色版本代码:

from pyvis.network import Network # pip install pyvis==0.3.1

import xlrd


def load_graph(path):
    g = Network(directed=False)  # 实例化网络图
    # 读取.xls文件(不能是.xlsx文件)
    xlsx = xlrd.open_workbook(path)

    #-------------------------------------------节点部分------------------------------
    # 获取节点
    tab_peo = xlsx.sheet_by_name("People")  # 读取People sheet
    nodesNum = tab_peo.nrows  # 获取该sheet中的有效行数(总人数+1)
    nodes = []
    for i in range (1, nodesNum): # 添加节点,按索引
        nodes.append(i)
    # 设置节点颜色,以某个颜色开始,按照索引顺序,渐变
    color = ['#00ffff']  # 为第一个结点赋予特殊颜色
    for x in range(len(nodes) - 1):
        current_of_color = int(x / len(nodes) * 255 * 2)
        if current_of_color > 255:
            color.append('#%02x%02x%02x' % (255, current_of_color - 255, current_of_color - 255))
        else:
            color.append('#%02x%02x%02x' % (current_of_color, 0, 0))
    # 添加节点(参数:节点列表,标签列表,颜色列表)
    g.add_nodes(nodes,
                label=['G'] * len(nodes),
                color=color)

    # -------------------------------------------边部分------------------------------

    # 添加couple关系
    edges = []
    tab_cp = xlsx.sheet_by_name("couple")  # 根据工作表名字读取excel中的某个表
    rowsNum = tab_cp.nrows  # 获取该sheet中的有效行数
    for i in range (rowsNum): # 遍历行,添加每一行所有单元格的数据内容(边关系)
        edges.append(tab_cp.row_values(i, start_colx=0, end_colx=None))  # 返回由该行中所有单元格的数据组成的列表
    g.inherit_edge_colors(False)
    for edge in edges:
        g.add_edge(edge[0], edge[1], color='green', label="couple", width = 8)

    # 添加parent关系
    edges = []
    tab_par = xlsx.sheet_by_name("parent")  # 根据工作表名字读取excel中的某个表
    rowsNum = tab_par.nrows  # 获取该sheet中的有效行数
    for i in range(rowsNum):
        edges.append(tab_par.row_values(i, start_colx=0, end_colx=None))  # 返回由该行中所有单元格的数据组成的列表
    g.inherit_edge_colors(False)
    for edge in edges:
        g.add_edge(edge[0], edge[1], color='blue', label="parent", width = 6)


    # 添加friend关系
    edges = []
    tab_fri = xlsx.sheet_by_name("friend")  # 根据工作表名字读取excel中的某个表
    rowsNum = tab_fri.nrows  # 获取该sheet中的有效行数
    for i in range(int(rowsNum*0.6)):
        edges.append(tab_fri.row_values(i, start_colx=0, end_colx=None))  # 返回由该行中所有单元格的数据组成的列表
    g.inherit_edge_colors(False)
    for edge in edges:
        g.add_edge(edge[0], edge[1], color='orange', label="friend", width = 6)


    # -------------------------------------------图展示------------------------------
    return g # 返回图




if __name__ == '__main__':
    crime = '涉恐' # 修改犯罪类型即可
    path = 'C:/Users/DELL/Desktop/构图数据/demo/' + crime + '.xls' # 需要另存为.xls文件,非.xlsx文件
    g = load_graph(path)
    g.show_buttons(filter_=['nodes', 'edges', 'physics']) # 在图展示的html中显示调参按钮
    g.show(crime + 'graph.html', notebook=False) # 图以html形式展示 pyvis=0.3.1(notebook=False)

结果图:

python转换visio文档 python visio库_excel_05