← 返回 Day 81 正文

Day 81 · 图解

Day 081 — 可视化架构图解

Matplotlib 架构

┌─────────────────────────────────────────────────────┐
│                    用户代码                           │
├─────────────────────────────────────────────────────┤
│                                                     │
│  ┌───────────────────────────────────────────────┐  │
│  │           pyplot (MATLAB 风格接口)              │  │
│  │  plt.plot()  plt.show()  plt.savefig()        │  │
│  └───────────────────────────────────────────────┘  │
│                        │                            │
│                        ▼                            │
│  ┌───────────────────────────────────────────────┐  │
│  │              Figure (画布)                      │  │
│  │  ┌─────────────┐  ┌─────────────┐             │  │
│  │  │   Axes 1    │  │   Axes 2    │  ...        │  │
│  │  │ ┌─────────┐ │  │ ┌─────────┐ │             │  │
│  │  │ │ Axis X  │ │  │ │ Axis X  │ │             │  │
│  │  │ │ Axis Y  │ │  │ │ Axis Y  │ │             │  │
│  │  │ └─────────┘ │  │ └─────────┘ │             │  │
│  │  │  Artists:   │  │  Artists:   │             │  │
│  │  │  - Lines    │  │  - Bars     │             │  │
│  │  │  - Text     │  │  - Patches  │             │  │
│  │  │  - Patches  │  │  - Text     │             │  │
│  │  └─────────────┘  └─────────────┘             │  │
│  └───────────────────────────────────────────────┘  │
│                        │                            │
│                        ▼                            │
│  ┌───────────────────────────────────────────────┐  │
│  │           Backend (渲染后端)                     │  │
│  │  Agg (PNG) │ PDF │ SVG │ GTK │ Qt │ WebAgg    │  │
│  └───────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────┘

GridSpec 布局示例

┌──────────────┬──────────────┬──────────────┐
│              │              │              │
│    gs[0,0]   │   gs[0,1]    │   gs[0,2]    │
│              │              │              │
├──────────────┼──────────────┼──────────────┤
│              │              │              │
│   gs[1,0]    │   gs[1,1]    │   gs[1,2]    │
│              │              │              │
├──────────────┼──────────────┼──────────────┤
│              │              │              │
│   gs[2,0]    │   gs[2,1]    │   gs[2,2]    │
│              │              │              │
└──────────────┴──────────────┴──────────────┘

跨行/跨列:
┌──────────────────────┬──────────────┐
│                      │              │
│     gs[0:2, 0:2]     │   gs[0, 2]   │
│      (跨2行2列)       │              │
│                      ├──────────────┤
│                      │              │
│                      │   gs[1, 2]   │
│                      │              │
├──────────┬───────────┼──────────────┤
│          │           │              │
│ gs[2,0]  │  gs[2,1]  │   gs[2, 2]   │
│          │           │              │
└──────────┴───────────┴──────────────┘

Matplotlib vs Plotly 对比

          Matplotlib                    Plotly
     ┌─────────────────┐          ┌─────────────────┐
     │   静态渲染       │          │   交互式渲染      │
     │   PNG/PDF/SVG   │          │   HTML/图片       │
     ├─────────────────┤          ├─────────────────┤
     │ ✅ 极高自定义     │          │ ✅ 原生交互       │
     │ ✅ 论文/报告     │          │ ✅ Web/仪表盘     │
     │ ✅ 轻量文件       │          │ ✅ 动画支持       │
     │ ❌ 无交互       │          │ ❌ 文件较大       │
     │ ❌ 部署复杂     │          │ ❌ 自定义受限      │
     └─────────────────┘          └─────────────────┘
              │                            │
              └──────────┬─────────────────┘
                         │
                    ┌────▼────┐
                    │  Seaborn │ ← 基于 Matplotlib 的高层 API
                    │  Dash    │ ← 基于 Plotly 的 Web 框架
                    └─────────┘