import networkx as nxfrom pyvis.network import Network# 1. 核心:五行节点five_elements = ["木", "火", "土", "金", "水"]# 2. 基础关系边(用列表存储(起点, 终点,关系类型, 权重))base_edges = [# 生关系 ("木", "火","生", 1.0), ("火", "土","生", 1.0), ("土", "金","生", 1.0), ("金", "水","生", 1.0), ("水", "木","生", 1.0), # 克关系(含"木→土")
("木", "土","克", -0.5), ("土", "水","克", -0.5), ("水", "火","克", -0.5), ("火", "金","克", -0.5), ("金", "木","克", -0.5),# 泄关系(生关系的反向,属于正向弱干扰)
("火", "木","泄", 0.5), ("土", "火","泄", 0.5), ("金", "土","泄", 0.5), ("水", "金","泄", 0.5), ("木", "水","泄", 0.5), # 耗关系(克关系的反向,如"土→木")
("土", "木","耗", -0.8), # 若同一对节点有多个关系,后续可拆分为多条边 ("土", "金","耗", -0.8), ("金", "火","耗", -0.8), ("火", "水","耗", -0.8), ("水", "木","耗", -0.8)]# 3. 初始化有向图G = nx.DiGraph()# 4. 添加核心节点(可给节点加“维度”属性,比如核心节点标为“核心-五行”)for elem in five_elements: G.add_node(elem, category="核心-五行", color="#FF6B6B") # 节点颜色自定义
# 5. 添加基础关系边:遍历列表(边的属性、关系类型、权重)for start, end, rel_type, weight in base_edges: # 给不同关系边设不同颜色,方便区分 edge_color = "#4ECDC4" if weight > 0 else "#FF9F43"
G.add_edge( start, end,
relationship=rel_type,
weight=weight,
color=edge_color, width=abs(weight)*2
)# 6. 动态可视化有向图(生成HTML文件,打开后可拖拽节点、hover看属性)net = Network(notebook=False, directed=True, height="800px", width="100%")net.from_nx(G)
# 调整节点标签显示(hover时显示“节点名+类别+边属性”)for node in net.nodes: node["title"] = f"节点:{node['id']}\n类别:{node['category']}"for edge in net.edges: start = edge["from"] end = edge["to"] nx_edges = G.get_edge_data(start, end) # 取同一对节点的所有边 edge_attr=next(iter(nx_edges.values()) edge["title"]=f"""关系: {edge_attr['relationship']} \n权重: {edge_attr['weight']}""" # 保存并打开动态图net.save_graph("五行核心基础网络.html")print("基础网络已生成,打开HTML文件查看动态效果!")以上是我的完整代码,语法、格式错误位置,已用三行引号换行,但未解决f-string语法的 f会被系统误认为字符串问题:问题位置:edge['title'] = f"""关系: {edge_attr['relationship']}\n权重: {edge_attr['weight']}"""你们看,无论如何调整,都会有报错提示,以下是首次报错提示:Traceback (most recent call last): File "C:\Users\85848\OneDrive\文档\五行模型基本网络框架.py", line 63, in <module> net.from_nx(G, edge_attrs=["relationship", "weight", "color", "width"])TypeError: Network.from_nx() got an unexpected keyword argument 'edge_attrs'你看我该怎么办?
我还得接着用多层嵌套字典处理40+边缘关系节点,虽然它只有五个核心……但是对于Python初学者来说,还是很难……
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-289427.htm
[求助]我是一名Python初学者,在有关传统五行网络建模分析项目上,遇到代码报错问题
424 浏览
0 回复
暂无回复,快来抢沙发吧!