3.6 Org Plot

Org Plot 可以根据 Org 表格中存储的信息生成图表, 既可以是图形化图表,也可以是 ASCII 艺术图表。

Graphical plots using Gnuplot

Org Plot 可以借助 GnuplotGnuplot mode, 将 Org 表格中的数据生成二维与三维图表。 想要实际体验该功能,请先确保系统已安装 Gnuplot 与 Gnuplot mode, 随后将光标置于下方表格处,执行 C-c " gM-x org-plot/gnuplot

#+PLOT: title:"Citas" ind:1 deps:(3) type:2d with:histograms set:"yrange [0:]"
| Sede      | Max cites | H-index |
|-----------+-----------+---------|
| Chile     |    257.72 |   21.39 |
| Leeds     |    165.77 |   19.68 |
| Sao Paolo |     71.00 |   11.50 |
| Stockholm |    134.19 |   14.33 |
| Morelia   |    257.56 |   17.67 |

Org Plot 支持多种图表类型,也支持自行扩展更多类型。 例如可以按如下方式生成雷达图:

#+PLOT: title:"An evaluation of plaintext document formats" transpose:yes type:radar min:0 max:4
| Format            | Fine-grained-control | Initial Effort | Syntax simplicity | Editor Support | Integrations | Ease-of-referencing | Versatility |
|-------------------+----------------------+----------------+-------------------+----------------+--------------+---------------------+-------------|
| Word              |                    2 |              4 |                 4 |              2 |            3 |                   2 |           2 |
| LaTeX             |                    4 |              1 |                 1 |              3 |            2 |                   4 |           3 |
| Org Mode          |                    4 |              2 |               3.5 |              1 |            4 |                   4 |           4 |
| Markdown          |                    1 |              3 |                 3 |              4 |            3 |                   3 |           1 |
| Markdown + Pandoc |                  2.5 |            2.5 |               2.5 |              3 |            3 |                   3 |           2 |

可以看到 Org Plot 能够自动将表格表头用作图表标签。 通过表格前方的 ‘PLOT’ 关键字,还可以进一步控制图表的标签、类型、内容与外观。 下方列出 Org Plot 的全部可用选项。 更多说明与示例可参考 Org Plot tutorial

Plot options

set

指定绘图时需要设置的任意 Gnuplot 选项。

title

指定图表标题。

ind

指定表格中用作 ‘x’ 轴的列。

timeind

指定表格中用作 ‘x’ 轴时间值的列。

deps

以 Lisp 风格列表形式指定需要绘制的列,使用圆括号包裹、空格分隔, 例如 ‘dep:(3 4)’ 表示绘制第三列与第四列。 默认绘制除 ‘ind’ 指定列之外的所有列。

transpose

取值为 ‘y’ 、 ‘yes’ 或 ‘t’ 时,会在绘图前尝试转置表格数据。 也支持简写 ‘trans’ 。

type

指定图表类型,默认为 ‘2d’ 、 ‘3d’ 、 ‘radar’ 或 ‘grid’ 之一。 可用类型可通过 org-plot/preset-plot-types 自定义。

with

为所有待绘制列指定 ‘with’ 选项,例如 ‘lines’ 、 ‘points’ 、 ‘boxes’ 、 ‘impulses’ 。 默认为 ‘lines’ 。

file

若需要将图表输出至文件,可指定为 ‘"path/to/desired/output-file"’ 。

labels

为 ‘deps’ 指定的列设置标签列表。 若存在表头,默认使用列标题。

line

指定一整行内容,直接插入到 Gnuplot 脚本中。

map

绘制 ‘3d’ 或 ‘grid’ 类型图表时,将此项设为 ‘t’ 可绘制平面映射图,而非三维坡度图。

min

设置图表可使用的坐标轴最小值,默认指代 ‘y’ 轴。 可通过 ‘xmin’ 与 ‘ymin’ 分别显式指定 ‘x’ 轴与 ‘y’ 轴的最小值。

max

设置图表可使用的坐标轴最大值,默认指代 ‘y’ 轴。 可通过 ‘xmax’ 与 ‘ymax’ 分别显式指定 ‘x’ 轴与 ‘y’ 轴的最大值。

ticks

设置希望显示的坐标轴刻度数量,供对应图表类型使用。 若未指定,需要刻度的图表类型会通过 org--plot/sensible-tick-num 自动计算合适值。

timefmt

指定 Org 时间戳的格式,以便 Gnuplot 解析。 默认为 ‘%Y-%m-%d-%H:%M:%S’ 。

script

若需要完全自主控制,可指定一个脚本文件(文件名用双引号包裹)用于绘图。 绘图前,脚本中所有 ‘$datafile’ 都会被替换为生成的数据文件路径。 注意:即使设置了该选项,通常仍建议指定图表类型,因为它会影响数据文件内容。

ASCII bar plots

将光标置于某一列上,输入 C-c " a 或执行 M-x orgtbl-ascii-plot,即可新增一列并生成 ASCII 风格的柱状图。 该图表通过常规表格公式实现。当源列数据变化时, 可通过刷新表格更新柱状图,例如输入 C-u C-c *

| Sede          | Max cites |              |
|---------------+-----------+--------------|
| Chile         |    257.72 | WWWWWWWWWWWW |
| Leeds         |    165.77 | WWWWWWWh     |
| Sao Paolo     |     71.00 | WWW;         |
| Stockholm     |    134.19 | WWWWWW:      |
| Morelia       |    257.56 | WWWWWWWWWWWH |
| Rochefourchat |      0.00 |              |
#+TBLFM: $3='(orgtbl-ascii-draw $2 0.0 257.72 12)

该公式为 Elisp 调用。

Function: orgtbl-ascii-draw value min max &optional width

在表格中绘制 ASCII 柱状条。

VALUE 为待绘制的数据值。

MIN 对应空柱所代表的数值,MAX 对应填满整个 WIDTH 柱宽的数值。 超出该范围的源数据会显示为 ‘too small’ 或 ‘too large’ 。

WIDTH 为柱状图所占字符数,默认为 ‘12’ 。