# MoonPlot 现有能力与验收范围

MoonPlot 面向实际绘图需求，先提供可用的小功能，再逐步完善。
当前工作复用已有的数据、图表、坐标轴和 SVG 实现，以完整使用场景判断效果。
本页区分实现、历史验证与本轮验收，不把原型的全部参数和组合标为完成。

**当前状态：M1 基础二维 SVG 可用版已验收，可作为首次可用里程碑。**
验收日期：2026-10-24；相关回归四目标各 353/353，详见 [M1 记录](MILESTONE_M1.md)。
**G2.1 交互 DOM 首片也已验收**：可选 Rabbita JS 组件、折线/散点交互与双图示例，详见[DOM 记录](RABBITA_DOM.md)。

**M2 v0.2.0** 补齐多图 SVG 资源隔离和独立接入版本包，详见 [M2 历史记录](MILESTONE_M2.md)。
当前分发改为 **`Lampese/mathplotlib@0.2.1`** 单一 module，静态根包与 Rabbita 子包一起安装；
发布状态和安装方式见 [接入说明](PUBLISHING.md)。

## 如何理解状态

- **已有实现**：代码中存在可调用入口和对应绘制路径。
- **历史测试依据**：此前有专项测试、源参考或项目回归记录，覆盖其声明的范围。
- **本轮已验收**：下方 M1 清单已实际运行、检查输出并通过相关回归；结果限于记录的场景。

历史验证增强对已有行为的信心，但不能证明所有参数、数据和布局组合都稳定。

## 现有能力

| 能力 | 已有实现 | 使用范围说明 |
| --- | --- | --- |
| 基础二维图表 | 折线、散点、柱状图、水平柱状图 | 支持数值数组或点数据；另有分类坐标便利入口 |
| 统计图表 | 直方图、饼图、箱线图、小提琴图等 | 已有计算和绘制实现，各入口支持的参数不同 |
| 图像与网格 | 标量图、RGB(A) 图像、热图、颜色映射和归一化 | 包含掩码、图像方向及部分插值路径 |
| 科学绘图 | 误差线、填充区域、等值线、三角网格、向量场、流线 | 已有专项实现，复杂组合仍需按场景确认 |
| 坐标轴 | 数值范围、刻度与格式器、线性及多种非线性尺度 | 包含显式设置和自动计算路径 |
| 日期与分类 | 日期时间、时区、日期格式、分类标签与映射 | 使用现有 typed 日期和分类接口 |
| 图形组合 | 多面板、共享轴、嵌套网格、次坐标轴 | 支持标题、轴标签、网格、图例、表格与标注 |
| 可变折线 | `Line2D` 数据、可见性、颜色、透明度、线宽、线型等 | 支持缓存更新、移除和保留渲染输入的相关生命周期 |
| 输出 | 自包含 SVG 字符串 | 可保存为文件，用浏览器或 SVG 工具查看 |
| 浏览器组件 | `Figure::to_drawing()` 与 `rabbita` JS 子包 | 真实 SVG DOM；点悬停/点击、应用控制的图例与数据更新；仅 JS 浏览器 |

常用入口可从根包使用，较细的功能分布在 `scene`、`ticker`、`transforms` 等包。
当前模块导入名为 `Lampese/mathplotlib`，展示名为 MoonPlot；浏览器组件导入 `Lampese/mathplotlib/rabbita`。
具体调用方式见 [使用指南](USAGE.md) 和 [项目首页](../README.md)。

## 可运行示例与验证依据

- [`cmd/main`](../cmd/main/main.mbt)：简单折线 SVG 示例，本轮 native 再次运行成功。
- [`cmd/preview`](../cmd/preview/main.mbt)：双曲线和散点预览，本轮 native 再次运行，SVG 与已保存输出逐字相同。
- [`cmd/gallery`](../cmd/gallery/main.mbt)：折线、散点、分类柱状图三面板；本轮已运行并检查实际渲染。
- [`assets/gallery.svg`](../assets/gallery.svg)及[展示预览](../assets/gallery.png)：该 Gallery 的实际输出。
- [`assets/two-series.svg`](../assets/two-series.svg)：该预览的实际 SVG 输出。
- [`assets/two-series.png`](../assets/two-series.png)：SVG 的展示预览，不是独立 PNG 后端。
- [`rabbita`](../rabbita/README.md)：可运行双图交互应用；真实浏览器11项交互/布局检查通过。

历史测试包含数值与日期格式化、单位转换、共享轴、自动范围、折线生命周期和 SVG
结构等检查；部分专项使用固定上游源生成参考结果。
这些依据描述的是对应的 typed 输入和数值、宿主范围，并非全参数兼容声明。
具体边界见 [能力参考](COMPATIBILITY.md) 与 [`testdata/`](../testdata) 中的专项说明。

本轮三个示例均生成可解析 SVG；Gallery 的折线、散点与完整柱形均位于各自面板内。

## M1：基础出图稳定与少量易用性

M1 以现有版本为基础，先保证日常二维 SVG 场景能顺利使用。
本轮修复实际触发的 grid 参数问题、视觉发现的柱宽范围错误，补齐四角图例，并提供经过运行的 Gallery。
直方图、图像、日期等已有入口可以复用，不为它们重建逐 API 验证矩阵。

### 本轮验收清单

- [x] **三图错误修复**：定位先前折线、散点、分类柱状图组合中的 `InvalidTicks`。
  对真实触发条件增加定向回归，分别检查单图与组合输出，不以隐藏错误代替修复。
- [x] **基础图表输出**：折线、散点、柱状图均可生成非空、可解析的 SVG。
  实际检查数据、标题、轴标签和刻度是否显示，而不只判断程序退出成功。
- [x] **默认与显式刻度**：相关示例分别覆盖默认计算和手动指定刻度、标签。
  显式刻度是正常功能，不能单独用来证明默认路径的问题已修复。
- [x] **相关数据与布局边界**：在本轮涉及的入口检查普通非空数据、常量数据、
  多面板及独立坐标轴；确认范围与标签合理，不扩展为所有数值边界的重新验收。
- [x] **四角图例**：支持左上、右上、左下、右下，保留默认位置和已有条目行为。
  检查多个系列和不同子图，确认位置设置不会串到其他面板。
- [x] **已有入口复用**：选取直方图、图像、日期等已有入口做少量代表性冒烟检查，
  将发现的问题记录为具体场景，不把各类图表的全部可选参数都纳入 M1。
- [x] **可运行 Gallery**：文档给出明确命令，实际生成 SVG，并检查真实渲染效果。
  标准输出应可保存为图像文档；示例源、预览资源和说明保持一致。
- [x] **验证与交接**：相关专项及项目要求的回归通过后，记录命令、结果与剩余限制，
  再由维护者更新 M1 状态；实现落盘不等于验收完成。

原 grid 错误已复现并修复；视觉发现的柱宽范围错误也已修复。
新增 14 个回归覆盖 grid、四角图例、根包基本流程与柱宽几何；最终相关测试四目标各353/353。
Gallery SVG 解析、数据计数、面板边界与 2400×840 展示预览已检查。

## 当前明确限制

- 静态输出为 SVG，可选 Rabbita 组件提供浏览器 DOM；没有独立 PNG、PDF 或桌面 GUI 后端。
- 浏览器可以显示 SVG，图像功能也可在 SVG 中嵌入位图；这不等于独立位图导出。
- 3D、动画、完整 mathtext/TeX、字体发现及精确文本排版尚未提供。
- 图表入口采用明确的 MoonBit 类型和有限参数集，复杂组合仍存在待处理问题。
- 日期、分类和共享轴已有实现，但不代表任意数据容器或单位扩展协议都已覆盖。
- 部分便利入口和原始对象接口有不同的返回值、参数或生命周期，使用时应查阅说明。

这些限制用于描述当前行为，不表示相关能力没有后续价值。
新功能按实际需求和可验证的使用场景逐步纳入。

## 独立目标：Rabbita 交互 DOM

G2.1 已实现并通过真实浏览器验收，使用 Rabbita `0.16.7` 的公开 SVG/HTML API。
折线、散点、PathCollection 的数值数据点可作为命中锚点；应用接收 hover/click/legend 消息并更新状态。
相关核心回归四目标各 370/370，adapter JS 7/7，Chrome 11项交互与布局检查通过、页面错误为零。
原有静态 SVG 示例保持逐字一致。命令与证据见[实现与验收](RABBITA_DOM.md)。

命中针对数据点，不是任意图形轮廓或线段。索引属于当前帧；数据重排后应用需要刷新选择状态。
当前支持滚动、响应式宽度、外层 padding/border 和 `xMidYMid meet` letterbox；
未覆盖触摸、缩放/平移、键盘导航及所有图表的交互。M2 已隔离图内 ID/url/href 资源。当前统一模块的安装方式与发布状态见 [接入说明](PUBLISHING.md)；
同一模块会解析 Rabbita 依赖，但核心静态包不 import UI，组件子包仅支持 JS。

后续大目标与推进顺序由项目路线图维护；本页记录能力与里程碑验收边界。
当前仍以运行结果和用户可见效果为准，不用接口数量替代可用性结论。
