从 Neo4j 数据库中提取数据并绘制图谱


代码说明:

  1. 连接 Neo4j 数据库

    • 使用 py2neo.Graph 连接到 Neo4j 数据库。
    • 确保替换 uriusernamepassword 为你的实际配置。
  2. Cypher 查询

    • 查询数据库中的节点和关系,限制返回的记录数(例如 LIMIT 100)以避免性能问题。
  3. NetworkX 图对象

    • 使用 networkx.MultiDiGraph 创建一个有向图对象。
    • 将查询结果中的节点和关系添加到图中。
  4. 绘制图形

    • 使用 matplotlibnetworkx 的绘图功能,将图谱可视化。
    • 节点和边的标签可以根据需要调整。
bash 复制代码
from py2neo import Graph
import networkx as nx
import matplotlib.pyplot as plt

# 1. 连接到 Neo4j 数据库
uri = "bolt://localhost:7687"  # 替换为你的 Neo4j URI
username = "neo4j"             # 替换为你的用户名
password = "password"          # 替换为你的密码

graph = Graph(uri, auth=(username, password))

# 2. 使用 Cypher 查询获取节点和关系
query = """
MATCH (n)-[r]->(m)
RETURN n, r, m
LIMIT 100
"""
results = graph.run(query)

# 3. 创建 NetworkX 图对象
G = nx.MultiDiGraph()

# 4. 将查询结果添加到 NetworkX 图中
for record in results:
    source = record["n"]
    target = record["m"]
    relation = record["r"]

    # 添加节点(如果节点已经有标签或属性,可以提取出来)
    G.add_node(source.identity, label=source['name'] if 'name' in source else "")
    G.add_node(target.identity, label=target['name'] if 'name' in target else "")

    # 添加边(关系)
    G.add_edge(source.identity, target.identity, label=relation.type)

# 5. 绘制图形
plt.figure(figsize=(12, 8))

# 设置布局
pos = nx.spring_layout(G, seed=42)

# 绘制节点
nx.draw_networkx_nodes(G, pos, node_size=300, node_color="lightblue")

# 绘制边
nx.draw_networkx_edges(G, pos, arrows=True)

# 绘制节点标签
node_labels = {node_id: G.nodes[node_id].get("label", "") for node_id in G.nodes()}
nx.draw_networkx_labels(G, pos, labels=node_labels, font_size=10)

# 绘制边标签
edge_labels = {(u, v): G[u][v][0]['label'] for u, v in G.edges()}
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_size=8)

# 显示图形
plt.title("Neo4j 图谱可视化")
plt.axis("off")  # 关闭坐标轴
plt.show()

输出示例:

运行上述代码后,你将看到一个可视化的图谱,其中:

  • 节点表示 Neo4j 中的实体。
  • 边表示实体之间的关系。
  • 节点和边的标签显示了它们的名称或类型。
相关推荐
ltl8 分钟前
持久内存退场之后:ZNS SSD 与下一代非易失内存
数据库
故乡dee云3 小时前
AWS 产品太多不会选?按“网站、数据库、文件、日志”4 类需求快速匹配
数据库·云计算·aws
曹牧4 小时前
C#:问号
前端·数据库·c#
奇树谦5 小时前
《现代 Key-Value 数据库原理:从 B+Tree 到 LSM Tree》-第五篇:现代数据库横向对比
数据库·lsm-tree
李白客5 小时前
分布式集群与数据库产业:从单机到集群的架构跃迁与市场重构
数据库·分布式·架构
福大大架构师每日一题5 小时前
Redis 8.10.0 正式发布:紧凑哈希、批量导入、备份恢复、流与时序能力全面升级
数据库·redis·哈希算法
雨晨源码(同名B站)6 小时前
基于深度学习YoloV11农业病害虫害检测系统 智慧农业信息化综合管理平台 (附源码+lw文档+ppt)
数据库·人工智能·深度学习·yolo·信息可视化
DBA小马哥7 小时前
向量数据库入门到进阶:Embedding、ANN算法与RAG落地的关键术语
数据库·算法·embedding
云和数据.ChenGuang7 小时前
fastapi项目拆分实战数据模型
java·服务器·数据库·人工智能·深度学习·fastapi·强化学习
祈禾7 小时前
Redis三大特殊数据类型
运维·服务器·数据库·redis·笔记·缓存