做知识点思维导图生成工具,输入核心知识点,自动生成思维导图框架,支持添加子知识点关联内容,导出图片,方便梳理知识体系。

8 阅读5分钟
  1. 实际应用场景描述

在智能时代,知识更新速度极快,开发者、学生、产品经理等都需要不断梳理知识体系。

例如:

  • 全栈开发:前端、后端、数据库、DevOps 等模块的知识结构。
  • 机器学习:算法、数据处理、模型评估、部署等层次。
  • 项目管理:需求分析、计划、执行、监控、收尾等流程。

思维导图是梳理这些知识体系的有效工具,但现有工具(如 XMind、MindManager)存在以下问题:

  • 手动拖拽节点效率低,难以快速批量导入知识点。
  • 不支持编程自动化生成框架。
  • 导出图片格式受限,二次加工困难。
  1. 痛点分析

  2. 手动构建耗时:大量知识点需逐个添加,效率低。

  3. 缺乏结构化输入:无法直接从文本或 JSON 批量导入。

  4. 导出限制:部分工具导出为专有格式,不便分享或修改。

  5. 跨平台兼容性差:某些工具在 Linux/macOS 上体验不佳。

  6. 核心逻辑讲解

  7. 数据结构:使用树形结构( "Node" 类)表示知识点及其子知识点。

  8. 输入方式:支持命令行交互或 JSON 文件导入。

  9. 可视化引擎:使用 "matplotlib" + "networkx" 绘制树形图。

  10. 导出功能:保存为 PNG/SVG 图片。

  11. 模块化设计:

"node.py":定义知识点节点。

"mindmap.py":管理树结构及增删改查。

"render.py":负责绘图与导出。

"cli.py":命令行交互入口。

  1. 模块化代码(含详细注释)

4.1 node.py

class Node: """知识点节点类""" def init(self, name, content=""): self.name = name # 节点名称 self.content = content # 关联内容(可选) self.children = [] # 子节点列表

def add_child(self, child_node):
    """添加子节点"""
    self.children.append(child_node)

def to_dict(self):
    """转换为字典(用于序列化)"""
    return {
        "name": self.name,
        "content": self.content,
        "children": [child.to_dict() for child in self.children]
    }

@staticmethod
def from_dict(data):
    """从字典恢复节点"""
    node = Node(data["name"], data.get("content", ""))
    for child_data in data.get("children", []):
        node.add_child(Node.from_dict(child_data))
    return node

4.2 mindmap.py

from node import Node

class MindMap: """思维导图管理类""" def init(self, root_name): self.root = Node(root_name)

def find_node(self, path):
    """
    根据路径查找节点(路径格式:'父节点>子节点>孙节点')
    """
    parts = path.split(">")
    current = self.root
    for part in parts:
        found = None
        for child in current.children:
            if child.name == part.strip():
                found = child
                break
        if not found:
            return None
        current = found
    return current

def add_node(self, parent_path, name, content=""):
    """添加节点"""
    parent = self.find_node(parent_path)
    if parent:
        parent.add_child(Node(name, content))
        return True
    return False

def to_dict(self):
    return self.root.to_dict()

def save_to_json(self, filepath):
    import json
    with open(filepath, "w", encoding="utf-8") as f:
        json.dump(self.to_dict(), f, ensure_ascii=False, indent=2)

@staticmethod
def load_from_json(filepath):
    import json
    with open(filepath, "r", encoding="utf-8") as f:
        data = json.load(f)
    mm = MindMap(data["name"])
    mm.root = Node.from_dict(data)
    return mm

4.3 render.py

import networkx as nx import matplotlib.pyplot as plt from node import Node

def build_graph(node, graph=None, parent=None): """递归构建 NetworkX 图""" if graph is None: graph = nx.DiGraph() graph.add_node(node.name, content=node.content) if parent: graph.add_edge(parent.name, node.name) for child in node.children: build_graph(child, graph, node) return graph

def draw_mindmap(mindmap, output_path="mindmap.png"): """绘制并导出思维导图""" graph = build_graph(mindmap.root) pos = nx.nx_agraph.graphviz_layout(graph, prog='dot') # 树形布局 plt.figure(figsize=(12, 8)) nx.draw(graph, pos, with_labels=True, node_size=3000, node_color="lightblue", font_size=10, font_weight="bold", arrows=False) plt.savefig(output_path, format="PNG", dpi=300) plt.close() print(f"思维导图已保存至 {output_path}")

4.4 cli.py

from mindmap import MindMap

def main(): mm = MindMap("核心知识点") while True: cmd = input("输入命令 (add/list/save/load/draw/exit): ").strip().lower() if cmd == "add": parent = input("父节点路径: ") name = input("节点名称: ") content = input("关联内容(可选): ") if mm.add_node(parent, name, content): print("添加成功") else: print("未找到父节点") elif cmd == "list": # 简单打印(可扩展为树形打印) print(mm.to_dict()) elif cmd == "save": path = input("保存路径: ") mm.save_to_json(path) print("已保存") elif cmd == "load": path = input("加载路径: ") global mm mm = MindMap.load_from_json(path) print("已加载") elif cmd == "draw": output = input("输出图片路径(默认 mindmap.png): ") or "mindmap.png" from render import draw_mindmap draw_mindmap(mm, output) elif cmd == "exit": break else: print("未知命令")

if name == "main": main()

  1. README 文件

知识点思维导图生成工具

一个基于 Python 的思维导图生成器,支持从核心知识点自动生成框架、添加子知识点、导出图片,帮助梳理知识体系。

功能

  • 树形结构管理知识点
  • 支持 JSON 导入/导出
  • 自动绘制思维导图
  • 导出 PNG 图片

安装依赖

bash

pip install networkx matplotlib pygraphviz

(Windows 可能需要安装 Graphviz 软件)

使用

bash

python cli.py

命令:

  • add:添加节点
  • list:查看结构
  • save:保存为 JSON
  • load:加载 JSON
  • draw:导出图片
  • exit:退出

示例

核心知识点

全栈开发

前端

HTML/CSS

JavaScript

后端

Python

Java

数据库

MySQL

Redis

目录结构

.

├── node.py

├── mindmap.py

├── render.py

├── cli.py

└── README.md

  1. 使用说明

  2. 首次运行:执行 "python cli.py" 进入交互模式。

  3. 添加节点:输入 "add",按提示输入父节点路径、名称、内容。

  4. 保存/加载:使用 "save" 和 "load" 持久化数据。

  5. 绘制导出: "draw" 生成 PNG 图片。

  6. 扩展:可集成到 Web 服务或 Jupyter Notebook。

  7. 核心知识点卡片

知识点 说明 树形数据结构 用 Node 类表示父子关系 NetworkX 图论库 构建并绘制树形图 Matplotlib 可视化 生成高质量图片 JSON 序列化 实现数据持久化 模块化设计 分离数据、逻辑、视图层 CLI 交互 提供友好命令行界面 Graphviz 布局 优化树形显示效果

  1. 总结

本工具通过 Python 实现了思维导图的自动化生成与管理,解决了手动构建耗时、格式受限的痛点。

后续可扩展方向:

  • Web 界面(Flask/Django + 前端可视化)
  • Markdown 导入(自动解析标题层级)
  • 更多导出格式(PDF、SVG、HTML)
  • AI 辅助生成(根据关键词自动扩展知识点)

这样既体现了智能时代的创新精神,又保持了技术的实用性和可扩展性。

如果你愿意,可以做一个 Web 版思维导图生成器,让用户直接在浏览器里拖拽编辑并实时预览, 利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧!