Woxi 绘图教程:从 Plot 到 SVG 导出,5个技巧画出出版级数学图表
Woxi 绘图教程:从 Plot 到 SVG 导出,5个技巧画出出版级数学图表
Woxi 是一个用 Rust 实现的 Wolfram Language 解释器("Wolfram oxidized"),内置 Plot、Plot3D、BarChart、Histogram 等完整的绘图函数,并支持将图表一键导出为 SVG 矢量文件。本文面向新手,用 5 个技巧带你从第一行 Plot 写起,最终得到可以直接放进论文或报告的出版级数学图表。
1️⃣ 准备工作:30 秒搭好 Woxi 绘图环境
Woxi 支持 CLI 脚本、Jupyter Notebook 和浏览器 Playground 三种方式运行绘图代码,安装只需一行命令:
cargo install woxi
也提供 npm 包 woxi-wasm(npm install woxi-wasm)和 Python 包(pip install woxi)。安装完成后验证一下:
woxi eval "1 + 2"
# 3
三种运行方式一览:
- CLI 脚本:
woxi run my_plot.wls直接执行.wls脚本 - REPL 交互:
woxi repl中逐行实验参数 - Jupyter / Studio:
woxi install-kernel安装内核后,图表直接在笔记本里以 SVG 渲染
不想装?官方提供完全运行在浏览器里的 JupyterLite 实例,开箱即用。下面先展示命令行工作流,Jupyter 的效果后文配图说明。
2️⃣ 技巧一:一行 Plot 画出函数曲线
Plot[f, {x, xmin, xmax}] 是最核心的函数绘图入口。先画出正弦曲线:
Plot[Sin[x], {x, 0, 2 Pi}]
一次画多条曲线,只需传入列表,并配上样式与图例:
Plot[{Sin[x], Cos[x]}, {x, 0, 2 Pi},
PlotStyle -> {Red, Blue},
PlotLegends -> {"sin", "cos"},
GridLines -> Automatic]
Plot 的常用选项(完整清单见 tests/cli/plotting/Plot.md):
| 选项 | 作用 |
|---|---|
PlotRange |
坐标范围,All 显示全部采样点,Automatic 自动裁剪极端值 |
PlotStyle |
线型/颜色,如 Red、Dashed、Thickness[0.01] |
AxesLabel |
坐标轴标签 {xLabel, yLabel} |
PlotLabel |
图表标题 |
PlotLegends |
图例 |
Filling |
曲线间/曲线与坐标轴之间的填充,如 {1 -> {2}} |
PlotPoints / MaxRecursion |
自适应采样密度 |
3️⃣ 技巧二:用数据图呈现实验与统计结果
有了数据序列,就切换到列表类图表(详见 tests/cli/plotting.md):
(* 散点/折线:Joined -> True 连成折线 *)
ListPlot[Table[{x, Sin[x] + 0.1 RandomReal[]}, {x, 0, 6 Pi, 0.3}], Joined -> True]
(* 直方图:二项宽度 + 概率密度归一化 *)
Histogram[RandomVariate[NormalDistribution[], 200], "PDF"]
(* 条形图:带类别标签 *)
BarChart[{3, 1, 4, 1, 5, 9}, ChartLabels -> {"a", "b", "c", "d", "e", "f"}]
几个实用细节:
ListPlot支持Filling -> {1 -> {2}}在两组数据间画茎,PlotMarkers可换成任意字符标记BarChart用BarOrigin -> Left变横向条形图,ChartStyle -> "Pastel"等 12 种命名配色方案直接套用,详见 tests/cli/plotting/BarChart.mdHistogram支持"Count"、"PDF"、"CDF"等高度规格,多组数据可叠加绘制,见 tests/cli/plotting/Histogram.md
4️⃣ 技巧三:Plot3D 升维 + PlotGrid 排版
表面图只需两个范围参数:
Plot3D[Sin[Sqrt[x^2 + y^2]], {x, -3, 3}, {y, -3, 3},
ColorFunction -> "Rainbow"]
Plot3D 支持 ViewPoint(视角)、ColorFunction -> "TemperatureMap"、Lighting、Mesh 等选项,完整列表见 tests/cli/plotting/Plot3D.md。
一张图讲不清?用 PlotGrid 把多张图排进共享网格,或更自由的 GraphicsGrid(GraphicsRow / GraphicsColumn 同理):
PlotGrid[{{Plot[Sin[x], {x, 0, 2 Pi}],
Plot[Cos[x], {x, 0, 2 Pi}]},
{Plot[Sin[2 x], {x, 0, 2 Pi}],
Plot[Sin[3 x], {x, 0, 2 Pi}]}]]
5️⃣ 技巧四:出版级美化的 5 个开关
让图表从"草稿"变"成品",主要靠这几个选项组合:
Plot[Exp[-x/8] Sin[x], {x, 0, 8 Pi},
PlotTheme -> "Scientific", (* ① 科研风格主题 *)
Ticks -> {Range[0, 8 Pi, Pi], Automatic}, (* ② 刻度显示为 π 的倍数 *)
Filling -> Axis, (* ③ 曲线下填充 *)
Frame -> True,
FrameLabel -> {"t", "y(t)"}], (* ④ 边框 + 轴标签 *)
(* ⑤ 输出分辨率:ImageSize -> 800 *)
要点说明:
PlotTheme:"Scientific"、"Business"等命名主题一键切换整体风格Ticks:刻度写成表达式时,Woxi 会按符号形式回显——x 轴按 π 的倍数刻度会直接读出0, π/2, π, …,而不是 1.5708 这种小数Filling:Axis/Bottom/Top/ 曲线间规则,配合FillingStyle调配色Frame+FrameLabel:出版排版常用边框代替坐标轴ImageSize:控制输出像素尺寸,{w, h}可分别指定
6️⃣ 技巧五:一键导出 SVG 矢量图
Woxi 的绘图输出本身是矢量对象,导出 SVG 无需任何截图或第三方工具:
(* 导出到文件 *)
Export["sine.svg", Plot[Sin[x], {x, 0, 2 Pi}], "SVG"]
(* 或拿到 SVG 字符串自行处理 *)
ExportString[Plot[x, {x, 0, 1}], "SVG"]
命令行一行出图:
woxi eval 'Export["parabola.svg", Plot[x^2, {x, -2, 2}, PlotTheme -> "Scientific"], "SVG"]'
SVG 是矢量格式,无限放大不模糊,还能在编辑器里直接改样式——这正是"出版级"的关键。官方数据分析示例就演示了完整流水线:读 CSV → 分组统计 → 三张 BarChart → GraphicsGrid 拼版 → 导出 SVG,全程见 examples/data-analysis/data-analysis.wls。格式选项细节见 tests/cli/file_system/Export.md 与 tests/cli/file_system/ExportString.md,SVG 渲染实现的单元测试在 tests/miscellaneous_tests/svg_rendering.rs。
7️⃣ 在 Jupyter 中实时预览图表
在 Jupyter 笔记本里,每个 Plot 表达式执行后立即以 SVG 渲染在单元格下方,边改参数边看图:
Jupyter 内核的安装与 woxi run notebook.nb 直接运行 .nb 文件的用法,见 readme.md 的 Jupyter Notebook 章节。
📚 延伸资源
- 全部支持的绘图函数清单:tests/cli/plotting.md(
ParametricPlot、PolarPlot、ContourPlot、StreamPlot、WordCloud等 60+ 种) - 绘图引擎源码:src/functions/plot.rs、src/functions/chart.rs、src/functions/graphics.rs
- 图像导出实现(含 SVG 包装、动图 GIF):src/functions/image_ast.rs
- 函数实现状态总表:functions.csv
- 官方文档站点入口:readme.md
按"画曲线 → 摆数据 → 升维排版 → 美化 → 导出"这五步走,Woxi 就能让你在几分钟内产出论文质量的数学图表 📈


