# MoonPlot 现有能力与验收范围

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

**当前状态：M1至M16已验收并实际交付。**
[M16](MILESTONE_M16.md)0.17.0已发布Mooncakes与GitHub；极坐标折线、散点和雷达图
支持原θ/r/类别提示、真实圆盘命中与高亮。612安装源逐一同正式包，四目标静态/Chrome59
和GitHub四附件完整下载通过；中央四目标全套及16页面Chrome204/0errors通过。
[M17](MILESTONE_M17.md)正在补极坐标柱形／玫瑰图，尚未标记可用或验收。

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

## 如何理解状态

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

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

0.3.0 增加柱形/直方图/饼图区域命中、折线横轴吸附与自定义提示，见 [提示功能](TOOLTIPS.md)。
2026-10-25 已重新核对常见图类的静态与交互缺口，见[本轮调查](CHART_COVERAGE.md)。
[M3](MILESTONE_M3.md) 已实现 nearest 标量热图单元格提示、分组/正负堆叠柱与真正环形图，
使用方法见 [0.4.0 图表指南](M3_CHARTS.md)。[M4](MILESTONE_M4.md) 已验收统计图与区间交互；见 [统计图指南](STATISTICS.md)。

## 现有能力

| 能力 | 已有实现 | 使用范围说明 |
| --- | --- | --- |
| 基础二维图表 | 折线、散点、柱状图、水平柱状图、分组/正负堆叠柱 | 多系列分类布局支持横竖向、显式宽度与非零起点 |
| 统计图表 | 直方图、饼/环形图、箱线图、小提琴图等 | 环形图有真实透明孔与正确环扇区命中；各入口支持的参数不同 |
| 离散曲线 | step、区间stairs与加权ECDF/CCDF | 实际线段保留原采样或返回槽；有效filled stairs提供完整区间strip命中 |
| 杆线图 | 竖向/横向stem | 实际杆段与默认圆头保留原head值、原索引、非零起点和正负方向；全局baseline静态 |
| 向量箭头 | quiver原始位置与U/V分量 | 实际shaft及双wing命中，zero保留原索引洞，clip保留原tail；通用value明确为V，不计算magnitude |
| 风羽图 | barbs与barbs_with_options的原输入位置/U/V | 实际羽枝Segment、旗面与三条描边、完整静风disk；pivot不改原始输入位置，value为原V。边界见M10 |
| 线等值线 | regular contour与tricontour精确level/series | 实际生成边Segment，原path槽、inline双片、clip前数据中点与可见屏幕中点；两mode物理命中，见[M11](MILESTONE_M11.md)，已正式交付 |
| 填色等值区 | contourf与tricontourf完整band region | 实际nonzero/evenodd多环保持孔洞和分岛空白，有限区间/代表值与原逻辑band槽；M12已实际交付0.13.0，见[专项指南](CONTOURF_INTERACTION.md) |
| 三角面着色 | tripcolor/direct/wrapper逐面值或顶点均值 | 原面槽、实际有序顶点和均值标志；mask空白/物理填面，两mode不跨空角。M13已交付0.14.0，见[指南](TRIPCOLOR_INTERACTION.md) |
| 连续流线 | streamplot / mesh / style-grid 的生成场值提示 | 原 seed/edge、边中点 U/V 与可选原颜色标量；实际非零线身物理命中，箭头静态。M14已交付0.15.0，见[指南](STREAMPLOT_INTERACTION.md) |
| 极坐标与雷达 | typed PolarAxes 的折线、散点与闭合轮廓雷达 | 弧度输入、方向/偏移、径刻度与分类标签、真圆投影/裁剪；保留原theta/r与N点，静态SVG和RabbitaDOM。0.17.0已交付原θ/r/类别提示与圆形命中，专项、中央和实际分发核验通过；见[指南](POLAR.md) |
| 图像与网格 | 标量图、RGB(A) 图像、热图、颜色映射和归一化 | 包含掩码、图像方向及部分插值路径 |
| 科学绘图 | 误差线、填充区域、等值线、三角网格、向量场、流线 | 已有专项实现，复杂组合仍需按场景确认 |
| 坐标轴 | 数值范围、刻度与格式器、线性及多种非线性尺度 | 包含显式设置和自动计算路径 |
| 日期与分类 | 日期时间、时区、日期格式、分类标签与映射 | 使用现有 typed 日期和分类接口 |
| 图形组合 | 多面板、共享轴、嵌套网格、次坐标轴 | 支持标题、轴标签、网格、图例、表格与标注 |
| 可变折线 | `Line2D` 数据、可见性、颜色、透明度、线宽、线型等 | 支持缓存更新、移除和保留渲染输入的相关生命周期 |
| 输出 | 自包含 SVG 字符串 | 可保存为文件，用浏览器或 SVG 工具查看 |
| 浏览器组件 | `Figure::to_drawing()` 与 `rabbita` JS 子包 | 真实 SVG DOM；折线/散点、柱形/直方图/饼环图、nearest 标量热图、flat矩形网格、二维计数及误差/面积/箱线/六角格/小提琴/离散曲线/Stem/Quiver/Barbs/线等值线的语义命中与自定义提示；填色等值区和三角面着色分别随0.13.0/0.14.0交付；连续流线 body 提示随0.15.0交付；应用控制图例与数据更新；仅 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 类型和有限参数集，复杂组合仍存在待处理问题。
- 日期、分类和共享轴已有实现，但不代表任意数据容器或单位扩展协议都已覆盖。
- 部分便利入口和原始对象接口有不同的返回值、参数或生命周期，使用时应查阅说明。
- 0.6.0补齐普通 bar/barh 在 Logit 值轴跨有效视图的区间；类别轴仍沿用现有端点有效性规则。
- 0.7.0已修正旧hexbin矩形分桶与实际轮廓错位，输入归属与顶点共用交错六角格；原中心/计数/聚合组和SVG会必要变化。
  `marginals=true`暂保留静态；详见[六边形分箱](HEXBIN_INTERACTION.md)。
- 小提琴body命中表示最近已有KDE估计采样，不代表观测点；统计线有独立部位身份，详见[小提琴交互](VIOLIN_INTERACTION.md)。
- 离散曲线不把合成转折点当新增观测；ECDF索引属于实际返回数组，压缩后不等于唯一原输入索引。
  非单调/有被删除顶点的filled stairs保留静态，不捏造矩形；完整dash空隙几何尚未纳入，见[Step](STEP_INTERACTION.md)、[Stairs](STAIRS_INTERACTION.md)、[ECDF](ECDF_INTERACTION.md)。

- 填色等值区显示clip区间和代表值，不能据此推断鼠标处原标量场值；几何锚点不代表网格观测。旧SVG的plot外margin填色保持静态，详见[填色等值区指南](CONTOURF_INTERACTION.md)。0.13.0已实际发布；三角面着色交互已通过[M13专项](MILESTONE_M13.md)，0.14.0中央完整验收和实际发布均已完成。

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

## 独立目标：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)。

上述数字属于 G2.1 历史验收。0.3.0 后续已增加柱形/直方图/饼图区域命中和语义提示，
最新验收见[提示功能](TOOLTIPS.md)；其他已有静态图表并未自动获得完整交互。
索引属于当前帧；数据重排后应用需要刷新选择状态。
当前支持滚动、响应式宽度、外层 padding/border 和 `xMidYMid meet` letterbox；
未覆盖触摸、缩放/平移、键盘导航及所有图表的交互。M2 已隔离图内 ID/url/href 资源。当前统一模块的安装方式与发布状态见 [接入说明](PUBLISHING.md)；
同一模块会解析 Rabbita 依赖，但核心静态包不 import UI，组件子包仅支持 JS。

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