如何仅通过终端/命令行将Neo4j输出图保存为PNG或SVG文件?
Neo4j命令行导出图谱为PNG/SVG的方法
Neo4j官方的cypher-shell命令行工具本身不支持直接将查询结果的图谱导出为PNG或SVG格式——这个可视化导出功能是Web浏览器端独有的。不过可以通过以下两种方案实现命令行下的图谱导出:
方案1:使用Neo4j Python驱动结合可视化库
通过Python驱动执行Cypher查询,获取节点和关系数据后,借助第三方可视化库生成并保存图像:
- 先安装依赖:
pip install neo4j py2neo matplotlib networkx - 示例代码:
from neo4j import GraphDatabase from py2neo import Graph import matplotlib.pyplot as plt import networkx as nx # 连接Neo4j数据库 uri = "bolt://localhost:7687" user = "neo4j" password = "your_password" graph = Graph(uri, auth=(user, password)) # 执行目标查询 query = "MATCH (n)-[r]->(m) RETURN n, r, m LIMIT 50" results = graph.run(query) # 构建NetworkX图结构 G = nx.DiGraph() for record in results: n_node = record["n"] m_node = record["m"] rel = record["r"] # 添加节点 G.add_node(n_node.id, label=list(n_node.labels)[0]) G.add_node(m_node.id, label=list(m_node.labels)[0]) # 添加关系 G.add_edge(n_node.id, m_node.id, rel_type=type(rel).__name__) # 绘制并保存为PNG pos = nx.spring_layout(G) nx.draw(G, pos, with_labels=True, node_size=3000, font_size=10) edge_labels = nx.get_edge_attributes(G, 'rel_type') nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels) plt.savefig("neo4j_graph.png") plt.close()
方案2:模拟Neo4j Browser的REST API请求
Neo4j Browser的导出功能基于REST接口实现,可在命令行用curl模拟该流程:
- 先登录获取会话令牌:
curl -X POST -H "Content-Type: application/json" -d '{"username":"neo4j","password":"your_password"}' http://localhost:7474/user/neo4j/token - 替换令牌和查询语句,导出为SVG:
若要导出PNG,将curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer YOUR_TOKEN" -d '{"query":"MATCH (n)-[r]->(m) RETURN n, r, m LIMIT 50","params":{},"outputFormat":"svg"}' http://localhost:7474/db/data/transaction/commit > output.svgoutputFormat参数改为png即可。
注意:第二种方案依赖Neo4j Browser的REST接口,不同版本的Neo4j可能存在接口参数差异,需对应版本验证。
内容的提问来源于stack exchange,提问作者ELMAHDY BOUSMITI
相关产品推荐
相关产品推荐

