ci: normalize generated interfaces without BOM drift
MoonPlot 是一个完全由 MoonBit 编写的声明式数据图表生成与可视化库。它把比例尺、图表布局、数据系列和渲染后端拆开,让同一份图表声明可以输出 SVG,也可以生成 Canvas 2D 命令。
Backend
SVGBackend
ChartBuilder
ChartLayout
moon add dgmxjj/moonplot@0.4.0
包发布后,按模块包路径导入,例如 dgmxjj/moonplot/src/chart、dgmxjj/moonplot/src/series 和 dgmxjj/moonplot/src/backend。如果要使用仓库中的示例或参与开发,请直接克隆源码。
dgmxjj/moonplot/src/chart
dgmxjj/moonplot/src/series
dgmxjj/moonplot/src/backend
请先安装 MoonBit 工具链。项目以 MoonBit 0.10.3 作为验收基线,建议使用官方安装器获取与 CI 一致的版本;验收 CI 会在 Linux、macOS 和 Windows 上安装工具链及 native 编译依赖。
git clone https://github.com/dgmxjj/MoonPlot.git cd MoonPlot moon update moon version --all
两个示例都是可直接运行的 MoonBit executable package,会把 SVG 写到标准输出:
moon run examples/basic_line > line_chart.svg moon run examples/basic_bar > bar_chart.svg moon run examples/benchmark_summary > iris-benchmark.svg
PowerShell 用户可以显式指定 UTF-8 输出:
moon run examples/basic_line | Set-Content -Encoding utf8 line_chart.svg moon run examples/basic_bar | Set-Content -Encoding utf8 bar_chart.svg
也可以使用 Make:
make examples
line_chart.svg 应包含折线 <line>、坐标轴、网格和图例;bar_chart.svg 应包含柱形 <rect>、分类刻度和图例。生成的本地 SVG 不纳入版本控制。
line_chart.svg
<line>
bar_chart.svg
<rect>
基准示例使用仓库内的 UCI Iris 18 行数据子集,执行完整的 CSV 解析、统计摘要、比例尺和 SVG 渲染链路。数据来源、CC BY 4.0 署名和预期结果见 docs/BENCHMARKS.md。
docs/BENCHMARKS.md
下面的调用顺序展示了真实 API:先声明后端和图表,再从布局对象读取绘图区,最后绘制网格、坐标轴和数据系列。
let backend = @backend.SVGBackend::new(800.0, 600.0) let chart = @chart.ChartBuilder::new(backend) .set_title("Benchmark") .set_show_grid(true) .add_legend_item("throughput", @color.blue, "line") let layout = chart.layout() let (x_min, y_min, x_max, y_max) = layout.plot_bounds() let scale_x = @coord.LinearScale::new(0.0, 10.0, x_min, x_max) let scale_y = @coord.LinearScale::new(0.0, 100.0, y_max, y_min) chart.draw_title() chart.draw_legend() chart.draw_grid(scale_x, scale_y, 6, 6) @series.LineSeries::new([(0.0, 10.0), (5.0, 55.0), (10.0, 90.0)]) .set_color(@color.blue) .draw(backend, scale_x, scale_y) println(backend.to_string())
完整的 API 说明见 docs/API.md,布局设计见 docs/ARCHITECTURE.md。
docs/API.md
docs/ARCHITECTURE.md
src/backend/ Backend trait、SVGBackend、CanvasBackend src/chart/ ChartBuilder、ChartLayout、标题、图例、网格和坐标轴 src/color/ Color、调色板和颜色混合 src/coord/ LinearScale、LogarithmicScale、CategoryScale src/series/ LineSeries、ScatterSeries、BarSeries 与数据范围辅助 src/data/ 纯字符串 CSV 表格解析与数值列转换 src/stats/ 描述性统计、分位数、分箱、窗口聚合和相关系数 src/layout/ 多面板网格与图例换行布局 examples/ 可执行 SVG 示例与版本化基准数据 docs/ API、架构、基准、开发记录和参考范围
每个子目录都是独立的 MoonBit package;公开 API 的 .mbti 接口文件由 moon info 生成并纳入版本控制。
.mbti
moon info
本地常用检查命令:
moon check --target all --deny-warn moon build --target all --deny-warn moon test --target all --deny-warn moon fmt --check moon info
GitHub Actions 使用官方 MoonBit 安装器,在 ubuntu-latest、macos-latest 和 windows-latest 上执行同样的全目标检查、构建、测试、格式检查和接口漂移检查。Windows native 构建使用 MSYS2 UCRT64 GCC;本机没有 C 编译器时,可先运行对应平台的 CI 或安装 MSYS2。
ubuntu-latest
macos-latest
windows-latest
空数据系列不输出图形;空 CSV 返回明确错误;CSV 列数不一致报告行号;非法数字列报告数据行号;常数比例尺回退到有效起点;负值柱状图以零线为基线;负半径、负柱宽、非法窗口和极小画布会被安全钳制;SVG/Canvas 文本会转义 XML/JavaScript 特殊字符。
当前版本覆盖 SVG 离线输出和 Canvas 2D 命令生成;Canvas 后端不直接持有浏览器上下文,调用方负责把 to_js_code("ctx") 注入页面。当前不包含动画、交互式坐标轴、自动文本测量和完整 Web UI 组件。布局模块提供稳定的绘图区/图例边界,后续可以在不改变数据系列 API 的情况下扩展这些能力。
to_js_code("ctx")
MoonPlot 未复制上述项目的源代码;参考范围仅限公开 API 设计和图形渲染概念。项目自身使用 MIT License,基准数据保留独立的 CC BY 4.0 署名要求,详见 LICENSE 和 docs/REFERENCES.md。
LICENSE
docs/REFERENCES.md
Copyright (c) 2026 Dgmxjj。MoonPlot 使用 MIT License 发布。
MoonPlot 是一个基于 MoonBit 的轻量级、高扩展性的声明式数据图表渲染引擎。它旨在填补 MoonBit 生态在数据可视化领域的空白,通过提供一套统一的坐标轴、图例、数据序列抽象,支持将底层业务数据转换为标准的图形格式(初期原生支持纯文本终端预览与 SVG 后端输出)。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
MoonPlot 🌔📊
MoonPlot 是一个完全由 MoonBit 编写的声明式数据图表生成与可视化库。它把比例尺、图表布局、数据系列和渲染后端拆开,让同一份图表声明可以输出 SVG,也可以生成 Canvas 2D 命令。
特性
Backendtrait:内置SVGBackend和 Canvas 2D 命令后端。ChartBuilder+ChartLayout声明式布局:标题、图例、网格和绘图区边界由同一个布局对象计算。安装
从 Mooncakes 安装
包发布后,按模块包路径导入,例如
dgmxjj/moonplot/src/chart、dgmxjj/moonplot/src/series和dgmxjj/moonplot/src/backend。如果要使用仓库中的示例或参与开发,请直接克隆源码。从源码运行
请先安装 MoonBit 工具链。项目以 MoonBit 0.10.3 作为验收基线,建议使用官方安装器获取与 CI 一致的版本;验收 CI 会在 Linux、macOS 和 Windows 上安装工具链及 native 编译依赖。
可执行示例
两个示例都是可直接运行的 MoonBit executable package,会把 SVG 写到标准输出:
PowerShell 用户可以显式指定 UTF-8 输出:
也可以使用 Make:
line_chart.svg应包含折线<line>、坐标轴、网格和图例;bar_chart.svg应包含柱形<rect>、分类刻度和图例。生成的本地 SVG 不纳入版本控制。基准示例使用仓库内的 UCI Iris 18 行数据子集,执行完整的 CSV 解析、统计摘要、比例尺和 SVG 渲染链路。数据来源、CC BY 4.0 署名和预期结果见
docs/BENCHMARKS.md。最小使用方式
下面的调用顺序展示了真实 API:先声明后端和图表,再从布局对象读取绘图区,最后绘制网格、坐标轴和数据系列。
完整的 API 说明见
docs/API.md,布局设计见docs/ARCHITECTURE.md。项目结构
每个子目录都是独立的 MoonBit package;公开 API 的
.mbti接口文件由moon info生成并纳入版本控制。验证与 CI
本地常用检查命令:
GitHub Actions 使用官方 MoonBit 安装器,在
ubuntu-latest、macos-latest和windows-latest上执行同样的全目标检查、构建、测试、格式检查和接口漂移检查。Windows native 构建使用 MSYS2 UCRT64 GCC;本机没有 C 编译器时,可先运行对应平台的 CI 或安装 MSYS2。边界行为
空数据系列不输出图形;空 CSV 返回明确错误;CSV 列数不一致报告行号;非法数字列报告数据行号;常数比例尺回退到有效起点;负值柱状图以零线为基线;负半径、负柱宽、非法窗口和极小画布会被安全钳制;SVG/Canvas 文本会转义 XML/JavaScript 特殊字符。
当前范围与非目标
当前版本覆盖 SVG 离线输出和 Canvas 2D 命令生成;Canvas 后端不直接持有浏览器上下文,调用方负责把
to_js_code("ctx")注入页面。当前不包含动画、交互式坐标轴、自动文本测量和完整 Web UI 组件。布局模块提供稳定的绘图区/图例边界,后续可以在不改变数据系列 API 的情况下扩展这些能力。参考与致谢
MoonPlot 未复制上述项目的源代码;参考范围仅限公开 API 设计和图形渲染概念。项目自身使用 MIT License,基准数据保留独立的 CC BY 4.0 署名要求,详见
LICENSE和docs/REFERENCES.md。项目链接
许可证
Copyright (c) 2026 Dgmxjj。MoonPlot 使用 MIT License 发布。