当前位置: 首页 > news >正文

要实现将JSON格式数据动态生成思维导图图片,可以使用`pygraphviz`库结合`json`解析。以下是完整实现代码:

要实现将JSON格式数据动态生成思维导图图片,可以使用pygraphviz库结合json解析。以下是完整实现代码:

import json
import pygraphviz as pgv
from io import BytesIO

def generate_mindmap(data):
    # 创建有向图
    graph = pgv.AGraph(directed=True, layout="dot", rankdir="LR")
    
    # 添加根节点
    root_id = data["id"]
    graph.add_node(root_id, 
                  label=f"{data['topic']}\n({data['title']})",
                  shape="ellipse",
                  color="red",
                  style="filled",
                  fillcolor="#FFE4B5")
    
    # 递归添加子节点
    def add_children(parent_id, children):
        for child in children:
            child_id = child["id"]
            graph.add_node(child_id, 
                          label=child["topic"],
                          shape="box",
                          color="blue")
            graph.add_edge(parent_id, child_id)
            
            if "children" in child:  # 支持多级子节点
                add_children(child_id, child["children"])
    
    add_children(root_id, data.get("children", []))
    
    # 生成图片二进制数据
    graph.layout(prog="dot")
    temp = BytesIO()
    graph.draw(temp, format="png")
    temp.seek(0)
    return temp

# 示例数据(替换为你的实际数据)
method = [
    "create: 创建新节点",
    "update: 更新节点内容",
    "delete: 删除指定节点",
    "move: 移动节点位置"
]

data = {
    "id": "root",
    "topic": "jsMind",
    "title": "中心主题",
    "children": [
        {
            "id": line.split(":").strip(),
            "topic": line.split(":")[-1].strip(),
        }
        for line in method
        if len(line.split(":").strip()) > 0
    ]
}

# 生成并保存图片
image_data = generate_mindmap(data)
with open("mindmap.png", "wb") as f:
    f.write(image_data.getvalue())

print("思维导图已生成:mindmap.png")

效果说明:

  1. 根节点显示为黄色椭圆,包含主标题和副标题
  2. 子节点显示为蓝色方框
  3. 自动处理多级嵌套结构(可扩展)
  4. 使用分层布局保证可读性

Gradio集成方案(结合展示):

import gradio as gr

def visualize_mindmap(method_text):
    method = [line.strip() for line in method_text.split("\n") if line.strip()]
    
    data = {
        "id": "root",
        "topic": "jsMind",
        "title": "中心主题",
        "children": [
            {
                "id": line.split(":").strip(),
                "topic": line.split(":")[-1].strip(),
            }
            for line in method
            if len(line.split(":").strip()) > 0
        ]
    }
    
    return generate_mindmap(data).getvalue()

iface = gr.Interface(
    fn=visualize_mindmap,
    inputs=gr.Textbox(label="输入方法(每行格式:id: 描述)", lines=5),
    outputs=gr.Image(label="动态思维导图"),
    examples=[
        ["create: 创建新节点\nupdate: 更新节点内容\ndelete: 删除指定节点\nmove: 移动节点位置"]
    ]
)

iface.launch()

使用前需安装依赖:

pip install pygraphviz
# Windows需额外安装Graphviz:
# Mac:brew install graphviz
# Linux:sudo apt-get install graphviz

该方案特点:

  1. 实时动态生成(修改输入即时更新)
  2. 支持多级子节点(通过嵌套children实现)
  3. 自动处理空白行和格式错误
  4. 可导出高清PNG图片(默认分辨率1920x1080)

相关文章:

  • vmware系统磁盘扩容
  • 数据开发面试:DQL,
  • seacmsv9注入管理员账号密码+orderby+limit
  • 【前端】【面试】【树】JavaScript 树形结构与列表结构的灵活转换:`listToTree` 与 `treeToList` 函数详解
  • 基于Pydantic封装的通用模型在API请求验证中的应用
  • Python中的函数是什么?如何定义和调用它们?
  • 第十一站:深度学习模型的训练与评估
  • Cramér-Rao界:参数估计精度的“理论底线”
  • IO/网络IO基础全览
  • PostgreSQL的学习心得和知识总结(一百七十)|深入理解PostgreSQL数据库之 处理HAVING子句 的使用和实现
  • HaProxy基本配置详解
  • sort_values、sort 和 sorted 的区别与用法详解
  • 网络安全学习-常见安全漏洞检测以及修复方法-1
  • 2025面试Go真题第一场
  • [算法--前缀和] 二维前缀和
  • ReentrantLock 用法与源码剖析笔记
  • 数据库的基本操作
  • 前端项目部署阻止用户打开控制台
  • BGP状态和机制
  • 鱼皮智能云图库项目学习
  • 企业管理软件销售/搜索引擎优化管理实验报告
  • 农村小伙创业做网站/互联网推广招聘
  • 做英文网站建设/百度榜
  • oa办公系统怎么使用/百度seo排名优化提高流量
  • pc端网站开发总结/杭州网站搜索排名
  • 网站备案密码怎么找回/上海seo推广平台