从科研图表图像中提取曲线坐标数据的 macOS 应用 —— GetData Graph Digitizer 的原生复刻。
GraphDigger是临时工程代号,正式产品名待定且需查商标(原版 "GetData" 不建议沿用)。
作者:徐志勇 · 这个工具帮到了你的话,可以在应用里「关于 GraphDigger」扫码支持(微信支付 / 支付宝)。
许可证:GPL-3.0-only(仅第三版)· 版权归 徐志勇 所有。
LICENSE 是 GNU 通用公共许可证第三版的逐字原文(未加任何前言,这样 GitHub 才认得出它);
下面这几句是项目自己的说明:
- 免费使用、免费修改、免费分发
- 谁发布了基于它的衍生作品,谁就必须同样以 GPL 开源
- GPL 要求随二进制提供对应源码:本项目的发布包(Release 里的
.dmg)与源码在同一个仓库,天然满足
| 路径 | 内容 |
|---|---|
GraphDigger/ |
应用本体(Swift 6.4 / SwiftPM + AppKit)。完整的功能说明、快捷键、设计取舍见 GraphDigger/README.md |
proto/ |
Phase 0 的 Python 参考实现,以及算法精度验证报告 |
GetData复刻_功能需求文档.md |
功能需求(FRD v2.4,每条标注实施状态与路线图) |
GetData复刻_开发环境与架构设计.md |
分层架构设计 |
功能扩展提案.md |
对标 GetData 之外还要往哪走(逐条带出处与成本) |
实现复核报告.md |
把文档状态拿回代码里逐条回核的结果 |
GraphDigger_点重排工具设计.md |
「点重排」这个交互的设计记录 |
算法先在 proto/ 里用 Python 验证过再移植到 Swift,所以那份报告是理解 GDCore 里每个阈值从哪来的地方。
cd GraphDigger
./scripts/build_universal.sh --dmg # 通用二进制 arm64 + x86_64,产出 .app 与 .dmg
open dist/GraphDigger.app需要 Xcode 工具链(实测于 Swift 6.4),最低 macOS 12。
打开一张论文里的曲线图 → 标定坐标轴 → 取曲线颜色 → 框选取点 → 导出数值。
- 多条曲线各自独立取色,靠前景掩膜的三道闸门(距离 → 背景 → 色相)分开,不会互相串点
- 数据点存像素坐标而非数值,所以重新标定坐标轴会自动更新全部已提取数据
- 标定是四点独立轴(X/Y 各取两点),两轴不相交的图也能正确标定
- 折线、竖线波浪都有对应工具:区域取点(网格可换 X/Y 轴)、自动跟踪、手工取点,散点图另有符号匹配(
⌘M) - 一张图可以有多套坐标系(多子图
(a)(b)(c)),每条曲线归属其中一套、按自己那套换算 - 浅色 / 深色两种外观都支持:界面颜色全部跟随系统外观,设计规范见
美学设计.md - 整个工作可以存成一个
.gdproj文件(图片 + 标定 + 曲线数据),发给别人,对方装了本应用双击就能看到完整工程 - 导出 CSV / TSV / TXT / XML / DXF / EPS / XLSX(真工作簿,每条曲线一个表)
- 误差棒提取:对已取的点量出上下误差(不对称分开记),导出多
yErrLow/yErrHigh两列 - 去除图上网格线:网格与曲线同色时按几何特征去掉(成族的等距细直线),不误伤笔直数据段
- 导出的小数分隔符可切句点 / 逗号,给欧洲与部分中文区域的 Excel 用
- 通用二进制 arm64 + x86_64,最低 macOS 12
- 单测 236/236;无头端到端自检 131/131 —— 跑的是发布版二进制本身
- 精度目标 ≤0.5% 满量程,Phase 0 实测 p95 ≈ 0.17%
未定。