Python 生成思维导图:Mermaid + Pymdownx 自动绘图指南

1. 核心组件说明
  • Mermaid:基于文本的图表生成语言,支持思维导图语法
  • Pymdownx:Python Markdown 扩展包,提供 Mermaid 集成
  • 工作流:Python 生成 Mermaid 代码 → Markdown 渲染 → 输出图像
2. 环境配置

安装依赖:

pip install pymdown-extensions markdown

3. Python 生成 Mermaid 代码

创建思维导图数据结构并生成 Mermaid 代码:

def generate_mindmap(data):
    """自动生成 Mermaid 思维导图代码"""
    def build_nodes(node, depth=0):
        indent = '  ' * depth
        if depth == 0:
            yield f"{indent}root({node['name']})"
        else:
            yield f"{indent}{node['name']}"
        
        for child in node.get('children', []):
            yield from build_nodes(child, depth+1)
    
    nodes = "\n".join(build_nodes(data))
    return f"```mermaid\nmindmap\n{nodes}\n```"

# 示例数据结构
knowledge_map = {
    'name': 'Python编程',
    'children': [
        {'name': '基础语法', 'children': [
            {'name': '数据类型'},
            {'name': '控制流程'}
        ]},
        {'name': '高级特性', 'children': [
            {'name': '装饰器'},
            {'name': '生成器'}
        ]}
    ]
}

mermaid_code = generate_mindmap(knowledge_map)
print(mermaid_code)

4. Markdown 渲染配置

创建 config.yml 启用 Mermaid 支持:

markdown_extensions:
  - pymdownx.superfences:
      custom_fences:
        - name: mermaid
          class: mermaid
          format: !!python/name:pymdownx.superfences.fence_code_format

5. 完整工作流示例
from markdown import Markdown

# 生成 Mermaid 代码
mermaid_content = generate_mindmap(knowledge_map)

# 构建 Markdown 文档
md_content = f"""
# 知识图谱
{mermaid_content}
"""

# 配置渲染器
md = Markdown(extensions=['pymdownx.superfences'])
html_output = md.convert(md_content)

# 输出到文件
with open('knowledge_map.html', 'w') as f:
    f.write(html_output)

6. 进阶技巧
  1. 动态更新:结合数据库/API 实时生成导图

    import requests
    response = requests.get('https://api.example.com/knowledge')
    live_map = generate_mindmap(response.json())
    

  2. 样式定制:添加主题配置

    %%{init: {'theme': 'forest'}}%%
    mindmap
      root((Python))
    

  3. 自动化输出:定期生成报告

    from apscheduler.schedulers.blocking import BlockingScheduler
    
    def daily_report():
        new_data = fetch_daily_data()
        generate_report(new_data)
    
    scheduler = BlockingScheduler()
    scheduler.add_job(daily_report, 'cron', hour=9)
    

7. 效果预览

执行后生成的 HTML 文件将显示交互式思维导图:

  • 节点可折叠/展开
  • 支持鼠标悬停查看详情
  • 自动响应式布局

提示:在支持 Mermaid 的 Markdown 查看器(如 VS Code 预览模式)中可直接查看渲染结果,无需转换为 HTML。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐