☰
用 Vega-Lite 为学术论文制作高清图表:从在线编辑器到 LaTeX 的完整导出流程
2026/10/12 18:09:00 网站建设 项目流程
  • 数据可视化

【免费下载链接】vega-lite

A concise grammar of interactive graphics, built on Vega.

项目地址:https://gitcode.com/gh_mirrors/ve/vega-lite
点击查看免费下载

本指南完整讲解如何用 Vega-Lite 制作论文插图并嵌入 LaTeX 文稿:先在在线编辑器中加载图表,导出无限缩放的 SVG,再转为 PDF、裁剪留白,最后以 figure 环境插入论文。读完你可以掌握一条从图表规格(specification)到期刊可投稿图片的完整生产线,并了解仓库内置的命令行渲染工具作为自动化替代方案。

第一步:在 Vega-Lite 中创建图表

一切从一份图表规格开始。要导出可供论文使用的图片,可以从以下几个途径获取规格:

  • 使用 Vega-Lite 官网的示例集合,挑选与你需求相近的图表直接改造;
  • 从在线编辑器新建图表,或把已有图表复制到编辑器中;
  • 使用 Altair(Python 库)生成的 Vega-Lite 规格;
  • 从 Observable 等平台上的 Vega-Lite 示例中复制规格。

无论来源如何,最终都要把 Vega-Lite 规格粘贴到在线 Vega-Lite 编辑器中。编辑器的便利之处在于:完整的规格会编码保存在 URL 中,因此你可以把带参数的链接直接发给协作者,对方打开即可看到同一张图并继续修改。

本教程以编辑器中的一张示例图表(上文图片所示)为例,图中展示的是 Falcon 数据集在年度时间轴上的数据曲线。教程原文还提供了一个可直接在编辑器中打开的规格链接,其中包含了完整的图表定义。

需要超出 Vega-Lite 能力的自定义?

如果论文图表需要在 Vega-Lite 能力之外做精细定制,可以先把 Vega-Lite 规格编译为 Vega 规格,在编辑器中打开编译结果直接编辑底层 Vega 定义,改完后再继续下面的导出步骤。这种"编译后编辑"的路径适合需要细粒度控制渲染细节的场景。

第二步:导出为 SVG

在编辑器中加载图表后,点击Export,再选择Open SVG即可导出。

之所以选择 SVG 而不是位图,是因为 SVG 是矢量图形格式,可无限缩放:无论浏览器如何放大,图片边缘始终清晰锐利,不会出现像素化。这对论文中需要放大查看细节的图表尤为重要。

仓库本身的示例产物就是很好的佐证:examples/compiled/目录下为每个示例同时保存了.svg与.png两套产物,例如 airport_connections.svg 与对应的 airport_connections.png,以及编译后的 airport_connections.vg.json,可直接观察 SVG 与位图的差异。

第三步:转换为 PDF

LaTeX 不能直接导入 SVG,所以必须先将其转换为 PDF。转换方式有很多:Illustrator、其他图像编辑器、命令行脚本,或在浏览器中"打印为 PDF"。本教程采用最简单的方式——利用浏览器的打印功能:

  1. 在浏览器(如 Chrome 或 Firefox)中打开上一步导出的 SVG;
  2. 选择File → Print...(或按Cmd+P/Ctrl+P);
  3. 将目标(destination)设置为"Save as PDF",如图所示;
  4. 把生成的 PDF 保存到你的 LaTeX 论文目录中。

第四步:裁剪 PDF 去除空白

你会发现导出的 PDF 四周有大量空白——因为 SVG 被保存为一张独立的打印机页面。如果图表尺寸过大,需要先缩放使其在一页内完整放下,然后再进行裁剪。

裁剪步骤(以 macOS 自带预览 Preview 为例):

  1. 用 Preview 打开 PDF;
  2. 选择矩形选择(Rectangular Selection)工具;
  3. 在图表周围拖出选框,反复微调直到选框紧贴图表边缘;
  4. 点击裁剪(或按Cmd+K);
  5. 务必保存修改后的新文件,否则后续嵌入仍会带有多余留白。

若你更偏好命令行方式,也可使用其他 PDF 裁剪工具达到同样效果;关键是保证最终 PDF 的页面尺寸与图表内容精确贴合,这样在 LaTeX 中排版时边距才是可控的。

第五步:把图表嵌入 LaTeX 论文

最后,把裁剪好的 PDF 作为 figure 嵌入论文。假设文件命名为benchmark.pdf,可按下述模板调整文件名后使用:

\begin{figure} \centering \includegraphics[width=\columnwidth]{benchmark} \caption{\label{fig:benchmark} A title that describes the figure.} \end{figure}

\includegraphics[width=\columnwidth]让图表宽度适配当前栏宽,\caption与\label用于生成图表标题与交叉引用。至此,一条完整的"Vega-Lite → SVG → PDF → LaTeX"论文配图流水线就打通了。

进阶:用命令行工具自动化导出(仓库内置)

如果你需要批量产出论文图表,或者想把导出流程纳入脚本与 CI,Vega-Lite 仓库自带了一套命令行渲染工具。查看 package.json 中的bin字段可以看到四个命令:

命令作用
vl2svg把 Vega-Lite 规格渲染为 SVG
vl2png把 Vega-Lite 规格渲染为 PNG 位图
vl2pdf把 Vega-Lite 规格渲染为 PDF
vl2vg把 Vega-Lite 规格编译为 Vega 规格

典型用法(输入规格可来自文件或 stdin,输出可写文件或 stdout):

# SVG 输出(默认不带 XML 声明头,-h 可加入) vl2svg chart.vl.json > chart.svg # 直接产出 PDF,一步到位 vl2pdf chart.vl.json > chart.pdf # 高分辨率位图(--ppi 控制分辨率) vl2png --ppi 144 chart.vl.json > chart.png # 仅编译,查看底层 Vega 规格 vl2vg -p chart.vl.json > chart.vg.json

常用参数(详见 bin/args.js):

参数说明
-b, --base数据加载的基础目录,默认取输入规格所在目录,支持-b data/相对路径或-b http://host/data/
-s, --scale输出分辨率缩放因子,默认1
-h, --header(仅 SVG)输出时附带 XML 声明与 SVG doctype
--ppi(仅 PNG)输出分辨率,默认72
-c, --config指定 Vega 配置对象(JSON 或导出配置对象的 JS 文件)
-l, --loglevel日志级别:error/warn(默认)/info/debug
--seed随机数种子,用于可复现的布局
-f, --format、-t, --timeFormat自定义数字/时间格式 locale

这套工具的实现很值得参考:bin/render.js 展示了完整渲染管线——先调用 Vega-Lite 的compile(vlSpec, {config}).spec把高层规格编译为 Vega 规格,再创建无头vega.View,最后通过view.toSVG(scale)或view.toCanvas(...)输出。其中vl2pdf渲染时还特别启用了{textDrawingMode: 'glyph'}以保证 PDF 中文字按字形绘制(见 bin/vl2pdf)。

仓库自身的示例构建脚本就大量使用了这类命令行流水线:scripts/build-example.sh 先用bin/vl2vg -p编译示例规格,再用vg2svg/vg2png渲染出examples/compiled/下的.svg与.png产物。你可以照此思路,把论文图表也纳入vl2svg → 转 PDF → 裁剪的自动脚本中,让配图随数据更新一键重新生成。

结语

至此你已掌握从 Vega-Lite 图表规格到 LaTeX 论文图片的完整工作流:在线编辑器加载 → 导出 SVG → 浏览器打印为 PDF → 裁剪留白 →\includegraphics嵌入。若追求自动化,仓库内置的vl2svg/vl2pdf/vl2png命令提供了等价的命令行路径,其编译与渲染原理同样可以从 bin/render.js 与 src/index.ts 中追根溯源。如果你的图表最终需要发布到网页而非论文,还可以参考 site/usage/embed.md 中的 Vega-Embed 嵌入方案,两条路线互为补充。

  • 数据可视化

【免费下载链接】vega-lite

A concise grammar of interactive graphics, built on Vega.

项目地址:https://gitcode.com/gh_mirrors/ve/vega-lite
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询