(更新)grid-table 0.2:更新图表渲染引擎

我一直在开发 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 的行构建逻辑和回退机制。
  • 柱状图比条形图更复杂:垂直图表按行构建二维网格,因此更容易暴露字符串/字符问题。解决方法:重构柱状图生成器并确保行构建一致。
  • 字符可用性:某些环境无法可靠渲染块字符,所以图表可能"能运行"但看起来是空的。解决方法:选择可显示的填充字符,并提供 # 作为备选。
13 个赞

盲点的主意不错👍

看起来很强大了,图表显示也很美观。现在能导出png或者jpg图片吗?

还没做导出图片的功能。不过我在另外一个项目 org-headline-card 里尝试了用 svg 的方式来导出图片,或许可以用那个方式来进行。

1 个赞