import networkx as nx import matplotlib.pyplot as plt # 初始化知识图谱 G = nx.DiGraph() # 添加核心节点:铁 G.add_node("铁", category="元素", 性质="银白色金属,导电导热性好,延展性强") # 添加铁的物理性质 G.add_nodes_from([ ("密度7.86g/cm³", {"性质": "物理属性"}), ("熔点1538℃", {"性质": "物理属性"}), ("沸点2862℃", {"性质": "物理属性"}) ]) # 添加铁的化合物 G.add_nodes_from([ ("Fe₂O₃", {"类别": "氧化物", 性质="红棕色粉末,俗称铁红"}), ("Fe₃O₄", {"类别": "氧化物", 性质="黑色磁性晶体"}), ("Fe(OH)₂", {"类别": "氢氧化物", 性质="白色,易氧化"}), ("Fe(OH)₃", {"类别": "氢氧化物", 性质="红褐色胶体"}), ("FeSO₄", {"类别": "盐", 性质="浅绿色晶体,补铁剂"}), ("FeCl₃", {"类别": "盐", 性质="黄色固体,止血剂"}) ]) # 添加化学反应关系 G.add_edges_from([ ("铁", "Fe₃O₄", {"反应": "3Fe + 2O₂ → Fe₃O₄(点燃)"}), ("铁", "Fe₃O₄", {"反应": "3Fe + 4H₂O(g) → Fe₃O₄ + 4H₂↑(高温)"}), ("铁", "FeSO₄", {"反应": "Fe + H₂SO₄ → FeSO₄ + H₂↑"}), ("Fe(OH)₂", "Fe(OH)₃", {"反应": "4Fe(OH)₂ + O₂ + 2H₂O → 4Fe(OH)₃"}), ("Fe²⁺", "Fe³⁺", {"反应": "2Fe²⁺ + Cl₂ → 2Fe³⁺ + 2Cl⁻"}), ("Fe³⁺", "Fe²⁺", {"反应": "2Fe³⁺ + Fe → 3Fe²⁺"}) ]) # 添加用途关系 G.add_edges_from
时间: 2025-05-20 07:44:17 浏览: 33
### 构建铁及其化合物的知识图谱
为了使用 `NetworkX` 和 `Matplotlib` 创建一个关于铁及其化合物的知识图谱,可以按照以下方法设计并实现。以下是完整的 Python 实现代码以及解释。
#### 安装必要的库
在运行代码之前,请确保已安装所需的库:
```bash
pip install networkx matplotlib
```
#### 示例代码
下面是一个简单的例子,展示了如何构建一个有关铁 (`Fe`) 及其常见化合物(如氧化铁、氢氧化铁等)的知识图谱:
```python
import networkx as nx
import matplotlib.pyplot as plt
# 初始化有向图
G = nx.DiGraph()
# 添加节点 (代表实体)
nodes = {
'Fe': 'Iron',
'Fe2O3': 'Ferric Oxide',
'Fe(OH)3': 'Ferric Hydroxide',
'FeCl3': 'Ferric Chloride',
'FeSO4': 'Ferrous Sulfate'
}
for node, label in nodes.items():
G.add_node(node, label=label)
# 添加边 (代表关系)
edges = [
('Fe', 'Fe2O3', {'relation': 'oxidation'}),
('Fe', 'Fe(OH)3', {'relation': 'hydrolysis'}),
('Fe', 'FeCl3', {'relation': 'chlorination'}),
('Fe', 'FeSO4', {'relation': 'sulfatization'})
]
G.add_edges_from(edges)
# 绘制图形
plt.figure(figsize=(10, 8))
pos = nx.spring_layout(G) # 使用弹簧布局算法排列节点位置
labels = {node: data['label'] for node, data in G.nodes(data=True)} # 获取节点标签
edge_labels = {(u, v): d['relation'] for u, v, d in G.edges(data=True)} # 获取边的关系描述
nx.draw_networkx_nodes(G, pos, node_size=3000, node_color='lightblue') # 绘制节点
nx.draw_networkx_labels(G, pos, labels=labels, font_size=10, font_weight='bold') # 显示节点标签
nx.draw_networkx_edges(G, pos, edge_color='gray', arrowsize=20) # 绘制边
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_color='red') # 显示边的标签
plt.title('Knowledge Graph of Iron and Its Compounds')
plt.axis('off') # 隐藏坐标轴
plt.show()
```
#### 解释
- **节点** 表示不同的化学物质,例如铁原子 (`Fe`) 或者其化合物(如三氯化铁 `FeCl3`)。每个节点都有一个对应的名称作为属性存储。
- **边** 表示这些化学物质之间的转化关系,比如氧化反应 (`oxidation`) 或水解反应 (`hydrolysis`)。
- 使用 `spring_layout` 布局算法自动调整节点的位置以便于可视化[^1]。
#### 结果说明
执行以上代码后,会生成一张显示铁及其化合物之间关系的知识图谱。该图谱清晰地表达了不同化学物质间的转换逻辑和关联方式。
---
###
阅读全文
相关推荐


















