首页 > 解决方案 > 使用python创建带有权重的路径图

问题描述

我正在尝试根据路径列表创建一个边缘权重的图形。

示例数据为:

paths = [['home', 'bus stop', 'work'], ['home', 'shop', 'work'],
['home', 'shop', 'bus stop', 'work'], ['home', 'work'], ['home', 'bus stop']]

我需要得到这样的加权图或流程图:

没有足够的评分,所以这里是一个链接

问题是节点和路径的数量非常大,所以手动绘制它真的很不愉快。

标签: pythonpython-3.xgraphflowchart

解决方案


对于这种情况,我做了一个简单的解决方案。

from graphviz import Graph
paths = [['home', 'bus stop', 'work'], ['home', 'shop', 'work'],
         ['home', 'shop', 'bus stop', 'work'], ['home', 'work'], ['home', 'bus stop']]
path_count = len(paths)
all_nodes = set()
path_weights = {}
for path in paths:
    path.append(path[-1] + '_end')
    all_nodes = all_nodes | set(path)
    for i in range(len(path) - 1):
        if len(path) > 1:
            if path[i] + '->' + path[i+1] in path_weights:
                path_weights[path[i] + '->' + path[i+1]] += 1
            else:
                path_weights[path[i] + '->' + path[i+1]] = 1
g = Graph('G', filename='process.gv')
for key, value in path_weights.items():
    splitted = key.split('->')
    g.edge(splitted[0], splitted[1], label = str(round((value/path_count*100), 2)) + '%')

g.view()

它绘制了一个非常简单的图表,没有评级,所以只是一个链接

感谢大家。


推荐阅读