python - 使用python创建带有权重的路径图
问题描述
我正在尝试根据路径列表创建一个边缘权重的图形。
示例数据为:
paths = [['home', 'bus stop', 'work'], ['home', 'shop', 'work'],
['home', 'shop', 'bus stop', 'work'], ['home', 'work'], ['home', 'bus stop']]
我需要得到这样的加权图或流程图:
问题是节点和路径的数量非常大,所以手动绘制它真的很不愉快。
解决方案
对于这种情况,我做了一个简单的解决方案。
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()
它绘制了一个非常简单的图表,没有评级,所以只是一个链接
感谢大家。
推荐阅读
- javascript - 全局阵列重置在下一页
- r - 查找至少有一个关键字部分匹配的行
- mysql - 从多个表的 INNER JOINS 中获取所有记录
- python-3.x - 当python3链两个subprocess.run(如bash管道)得到错误“AttributeError:'bytes'对象没有属性'fileno'”
- c++ - 替换 av_read_frame() 以减少延迟
- python - 从复杂的 Csv/DataFrame 加载 Json,为 MongoDB 保留 dtypes
- windows - 验证(错误级别)批处理脚本命令并使用其输出发送邮件
- python - 移位 groupby 的滚动总和不适用于第一组条目的数据帧
- webpack - 为什么我不能在 docker 中构建这个 nuxtjs 应用程序,而本地构建工作?
- mysql-workbench - mysqlworkbench 错误 1142:创建命令拒绝用户 'readonly'@'