Python实现JSON数据动态生成思维导图图片

 更新时间:2025年02月23日 08:44:41   作者:大霸王龙  
这篇文章主要为大家详细介绍了Python如何实现将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")

效果说明:

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

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

该方案特点:

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

以上就是Python实现JSON数据动态生成思维导图图片的详细内容,更多关于Python数据生成思维导图的资料请关注脚本之家其它相关文章!

相关文章

  • Python中常见的异常总结

    Python中常见的异常总结

    当 Python 检测到一个错误时,解释器就会指出当前流已经无法继续执行下去,这时候就出现了异常。
    2018-02-02
  • Python3 解释器的实现

    Python3 解释器的实现

    在本篇内容中小编给大家总结了关于Python3解释器的用法以及相关知识点,需要的朋友们学习下。
    2021-06-06
  • Pytest+Allure使用示例教程

    Pytest+Allure使用示例教程

    Allure是开源的免费的自动化测试报告,支持Java,Python,我们来看看如何使用Python pytest与Allure整合,输出漂亮的测试报告,这篇文章主要介绍了Pytest+Allure使用教程,需要的朋友可以参考下
    2023-12-12
  • Python机器学习NLP自然语言处理基本操作新闻分类

    Python机器学习NLP自然语言处理基本操作新闻分类

    本文是Python机器学习NLP自然语言处理系列文章,开始我们自然语言处理 (NLP) 的学习旅程. 本文主要学习NLP自然语言处理基本操作新闻分类
    2021-09-09
  • Python 函数参数11个案例分享

    Python 函数参数11个案例分享

    大家好,今天给大家分享一下明哥整理的一篇 Python 参数的内容,内容非常的干,全文通过案例的形式来理解知识点,自认为比网上 80% 的文章讲的都要明白,如果你是入门不久的 python 新手,相信本篇文章应该对你会有不小的帮助,需要的朋友可以参考下
    2023-02-02
  • TensorFlow实现Logistic回归

    TensorFlow实现Logistic回归

    这篇文章主要为大家详细介绍了TensorFlow实现Logistic回归的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • Win7下搭建python开发环境图文教程(安装Python、pip、解释器)

    Win7下搭建python开发环境图文教程(安装Python、pip、解释器)

    这篇文章主要为大家分享了Win7下搭建python开发环境图文教程,本文主要介绍了安装Python、pip、解释器的详细步骤,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • 一文教你Python引入其他文件夹下的.py文件

    一文教你Python引入其他文件夹下的.py文件

    这篇文章主要为大家详细介绍了如何在Python中引入其他文件夹里的.py文件,并探讨几种常见的实现方式,有需要的小伙伴可以根据需求进行选择
    2025-03-03
  • pygame实现雷电游戏雏形开发

    pygame实现雷电游戏雏形开发

    这篇文章主要为大家详细介绍了pygame实现雷电游戏开发代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • matplotlib 范围选区(SpanSelector)的使用

    matplotlib 范围选区(SpanSelector)的使用

    这篇文章主要介绍了matplotlib 范围选区(SpanSelector)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02

最新评论