我一直在开发 grid-table,这是一个用于编辑带公式的表格数据的 Emacs 插件,这次更新使图表成为其核心功能。
自从上次发布以来,我一直非常渴望 grid-table 拥有自己的图表系统。最直接的想法是将表格中的数据导出为 gnuplot 格式,然后让它转换成图片。然而,由于 gnuplot 功能强大但格式复杂,适配相当具有挑战性。所以我后来想到,为什么不直接用文本字符来表示图表呢?然后我发现了 YouPlot 这个很酷的项目,它创新性地使用盲文中的标点来表示折线图,极大地丰富了文本图表的样式。
受此启发,我完善了自己的想法。现在 grid-table 拥有一个内置的图表渲染引擎,在我们查看数据时,多了一个维度的选择。同时,我也没有放弃让 grid-table 与 gnuplot 一起工作的想法。
更新内容
- 内置图表引擎(无需单独的图表插件)。
- 你可以直接将图表公式放入单元格中:
- BARPLOT、COLUMNPLOT、LINEPLOT、SCATTER、HISTOGRAM、BOXPLOT、DENSITY、COUNT、MULTILINE
- SPARKLINE(内联迷你趋势图)
- 图表查看器:将光标放在图表单元格上并按 C-c v 在 Grid Plot 中渲染。
- 快速插入:C-c i 交互式插入一些图表公式(目前支持 BARPLOT / LINEPLOT / SCATTER)。
- 文档与图库:README 包含图表语法指南和预览图库(截图在 pictures/ 文件夹中)
- .grid 加载兼容性:支持 plist(:title :headers :rows)和旧版演示格式。
Emacs-general 示例公式
- =BARPLOT(A1:A4, B1:B4, “Quarterly Revenue”, 50)
- =COLUMNPLOT(A1:A4, B1:B4, “Monthly Sales”, 40, 15)
- =LINEPLOT(A1:A10, B1:B10, “Trend Analysis”)
- =HISTOGRAM(C1:C100, 10, “Score Distribution”)
- =SPARKLINE(10, 15, 13, 17, 19) 或 =SPARKLINE(A1:A10)
快速体验
- 打开 examples/chart-gallery.grid
- 移动到包含图表公式的单元格
- 按 C-c v 预览
开发笔记/遇到的问题
- 多字节 vs 单字节字符串:Unicode 图表字符最初在修改字符串时触发了"尝试将非字节值存储到单字节字符串"的错误。解决方法:避免不安全的字符串修改路径,并添加支持 Unicode 的行构建逻辑和回退机制。
- 柱状图比条形图更复杂:垂直图表按行构建二维网格,因此更容易暴露字符串/字符问题。解决方法:重构柱状图生成器并确保行构建一致。
- 字符可用性:某些环境无法可靠渲染块字符,所以图表可能"能运行"但看起来是空的。解决方法:选择可显示的填充字符,并提供 # 作为备选。
