eplot 是一个用于交互式生成时间序列图表、绘图和条形图的 Emacs 软件包。
这是一个正在进行中的项目,目前可能还不太实用,但以下是目前的文档:
这里是一个例子...
这是另一个例子。
让我们从头开始。这是一个非常简单的例子,trivial-very-short.plt:
41
42.1
44.7
然后在这个缓冲区中输入 `M-x eplot',你会看到以下显示:
如果你安装了 pcsv 包,你也可以处理 CSV 文件。
Year,explore,investigate
2000,1834.6246923361425,3314.978325069512
2001,1973.1940690964868,3484.9536191658754
2002,2128.9463492787686,3671.1459598826505
...
只需在包含这些值的缓冲区中输入 `M-x eplot',eplot 就会尽力显示数据。
要调整图表的外观,有三种可能:
-
你可以在 eplot 缓冲区中使用
c' 命令,或在 plt 缓冲区中使用
C-c C-v' 命令。这个命令会使用 Transient 界面提示你输入值。 -
你可以在 eplot 缓冲区中使用 `l' 命令。这会弹出一个辅助的"控制"缓冲区,列出所有可以更改的默认设置。更改任何内容后按回车键即可看到更新后的图表。
-
最后,你可以在描述图表外观的文件中添加头部信息。
在下面的所有例子中,都使用了最后这种方法,因为在手册中浏览大量不同设置时这很方便,但我猜大多数用户可能更喜欢使用前两种方法中的一种(这两种方法可以混合使用 —— 你可以通过 Transient 进行一些设置,通过控制缓冲区进行一些设置)。
在下面的大多数例子中,都存在以下头部行,但不包含在代码示例中:
Layout: compact
Width: 300
Height: 200
默认情况下,eplot 使用更宽敞的布局,宽度/高度会根据窗口大小自动计算。但对于本手册中的这些例子,显示更小、更紧凑的图表更为方便。
你不需要在 .plt 文件中包含实际的图表数据 —— 相反,你可以用 Data-File: plot 头部指定数据位置:
Data-File: data1.txt
这是该数据集的基本默认外观。
好的,让我们来看看你有哪些选项可以改变图表的外观。
首先,有几种不同的绘图样式可供选择。默认是"line"样式。
Style: square
Style: curve
这使用贝塞尔曲线在点之间画一条平滑的线。它需要一个 Bezier-Factor。如果你把这个因子调得太高,会得到有趣的结果:
Style: curve
Gradient: red black
Bezier-Factor: 0.8
你也可以为曲线图添加渐变。
Style: triangle
Fill-Color: #c0c0c0
一些样式还接受 Fill 参数来指定填充颜色。
Style: rectangle
Size: 3
Color: red black green blue brown
Style: impulse
Style: point
Style: cross
Style: circle
Size: 8
这就是所有基本的绘图样式。
Data-File: data1.txt
Style: impulse
Color: blue
Data-File: data2.txt
你可以在一个图表中包含多个图,每个图都有自己的样式和颜色。
Y-Label-Format: %s%%
X-Label-Format: $%s
Data-File: data1.txt
你可以为 X 和 Y 标签指定格式字符串。
X-Label-Format: On %b %e
Data-Format: date
20090101 41
20090102 42.1
20090103 42.1
如果图表是日期/时间格式的,格式字符串将被传递给 `format-time-string'。
Format: bar-chart
Color: vary
Title: How Much Higher Would A Director Place
Mode: dark
X-Label-Orientation: vertical
Margin-Bottom: 150
1347 # Label: James Benning
789 # Label: Raúl Ruiz
782 # Label: Jim Jarmusch
...
在条形图中,你可以垂直放置 X 标签。
Format: horizontal-bar-chart
Color: vary
Mode: dark
1347 # 标签:詹姆斯·本宁 789 # 标签:劳尔·鲁伊斯 782 # 标签:吉姆·贾木什 ...
你也可以制作水平条形图。
有一种特殊的颜色规格叫做"vary",它会在一些预定义的易读颜色中进行选择:
样式:圆形 填充颜色:vary 边框颜色:无 大小:8
"vary"并不适用于所有绘图样式:
颜色:vary 数据文件:data1.txt
你也可以为每个数据点指定颜色/大小。以下是一个演示这一点的plt文件摘录:
样式:圆形 填充颜色:无 41 42.1 42.1 44.1 43.6 # 大小:10,填充颜色:红色 43.6 42.9 43 43.2 44.4 44.5 45.4 45.9 52 # 大小:10,填充颜色:蓝色 53
有时能够用文本或特殊标记突出显示某些值是很有用的。
样式:曲线 颜色:黑色 41 42.1 42.1 ... 53 # 文本:新型号,标记:十字,大小:3 52.5 51 ...
如你所见,你可以同时使用文本和标记。
数据格式:日期
样式:圆形 填充颜色:vary 大小因子:3 ... 20240624 5 20240728 6 20240712 14
你也可以使用大小因子——这意味着每个元素将随其值一起缩放。这仅对圆形、矩形等样式有意义。
条形图有些特殊:
格式:条形图
颜色:vary 33 20 24
每个条形单独显示,X轴上的标签显示在条形中间——这与同一数据集的箱线图很不相同:
格式:普通 最小值:0
样式:方形 33 20 24
无论如何,第一个条形图再次演示了"vary"颜色,但你可以自己指定颜色:
格式:条形图
颜色:绿色 灰色 33 # 标签:苹果 20 # 标签:橙子 24 # 标签:苹果橙
当颜色用完时,它会重新开始。这里还演示了另一个特性,即你可以为每个项目指定标签。
你也可以制作每个项目有两个值的图表,eplot会填充这两个值之间的数据:
数据格式:两个值 样式:方形 填充颜色:浅蓝色 填充边框颜色:黑色 数据文件:data-between.txt
模式:暗色 边框宽度:1
数据格式:两个值 样式:方形 渐变:红色 黑色 数据文件:data-between.txt
这是同一个数据集,但处于"暗色模式",并且在值之间有渐变。哦,还有边框,为什么不呢。
数据列:2 41 57.551391 42.1 59.88006 42.1 59.88006 ...
有时在同一文件中有几个数据集,但在不同的列中会很方便。你可以使用数据列标头来指定要绘制的列。
好的,关于图表你可以指定很多细节。这里有一个例子:
边框颜色:黄色 边框宽度:3 框架颜色:红色 周围颜色:绿色 背景颜色:蓝色 网格颜色:黑色 图表颜色:白色 标题:标题、背景和边框 坐标轴颜色:黑色 标题颜色:红色
数据文件:data1.txt
尽情发挥吧!但最好不要那么疯狂。
渐变:黑色 红色 数据文件:data1.txt
你也可以使用渐变来绘制数据。
渐变:黑色 红色 样式:方形 数据文件:data1.txt
你可以将渐变放在图表上方:
渐变:黑色 红色 自上而下 上方 数据文件:data1.txt
渐变:黑色 红色 自下而上 数据文件:data1.txt
你可以指定方向——这个基本上只是交换了颜色的顺序。
渐变:黑色 红色 从右到左 上方 数据文件:data1.txt
还可以从右到左... 渐变:黑红从左到右下方 数据文件:data1.txt
...以及从左到右。
渐变:黑红从下到上上方 数据文件:data1.txt
渐变:黑红从上到下下方 数据文件:data1.txt
以及图表下方。
渐变:黑红从左到右上方 数据文件:data1.txt
你可以用不同的渐变绘制同一数据集两次,以获得有趣的结果。
渐变:黑红从左到右上方 数据文件:data1.txt
渐变:黑红从下到上 数据文件:data1.txt
网格位置:顶部 网格颜色:黑色
渐变:#000030蓝色从左到右上方 数据文件:data1.txt
渐变:黑红从上到下下方 数据文件:data1.txt
使用填充/渐变图表时,通常将网格放在图表顶部会很有用。
网格位置:顶部 网格颜色:#803030
渐变:绿蓝从上到下上方 数据文件:data1.txt
渐变:黄红从上到下下方 数据文件:data1.txt
疯狂。
网格位置:顶部 网格颜色:黑色 网格不透明度:0.2
渐变:#000030蓝色从左到右上方 数据文件:data1.txt
渐变:黑红从上到下下方 数据文件:data1.txt
但是当这样将网格放在顶部时,通常将网格设为半透明会在视觉上更加舒适。
渐变:黑色25-紫色-50-白色-75-紫色-黑色 数据文件:data1.txt
你还可以设置更多的停止点。在这种情况下,第二个元素指定每种颜色结束的百分比点,所以上面的示例从黑色开始,然后在25%处是紫色,50%处是白色,75%处又回到紫色,最后在100%处结束于黑色(但你不必在这里包含100% —— 这是默认的)。
X轴标签:天 Y轴标签:金额 左边距:40 下边距:40 网格位置:顶部
数据文件:data1.txt
你可以在坐标轴上添加标签。如果你使用的是紧凑布局(就像我们在这些示例中所做的那样),你需要手动为标签腾出一些空间 —— 在正常布局中,已经为标签预留了空间。
数据格式:日期 平滑处理:移动平均 20090101 157 20090102 156 20090103 152 20090104 152 ...
你还可以使用日期格式来绘制日期序列。这里演示的另一个特性是,你可以让eplot在绘图前对数据进行平滑处理。
数据格式:时间 144000 78.0 145003 170.1 150014 212.9 ...
同样,你也可以绘制日内时间图表 —— 这采用HHMMSS格式。
数据格式:xy 数据文件:data-circle.txt
eplot并不是真正为做2D图表而设计的 —— 它主要用于时间序列和条形图。但它可以做简单的2D图表,只是缺少一些你所期望的控制。
背景图像文件:background.jpg 网格颜色:#333 颜色:白色 数据文件:data1.txt
你可以在背景中放置漂亮的木纹图像,模拟70年代的感觉。
背景颜色:#888 背景图像文件:background2.jpg 背景图像覆盖:plot 背景图像不透明度:0.6 网格颜色:#333 颜色:白色 数据文件:data1.txt
你可以将背景图像放置在整个图表上,只放在图表后面,或者只放在框架中。还可以调整不透明度。
图表颜色:白色 网格颜色:#444 背景渐变:蓝黑从右到左 数据文件:data1.txt 渐变:红黑
当然,你也可以在整个背景上使用渐变。
头文件:external-headers.plt
如果你要绘制很多图表,通常希望使用相同的基本参数。所以你可以把这些参数放在一个文件中,然后像这样包含它们。你还可以使用`M-x eplot-with-headers'命令,它会使用当前缓冲区中的数据绘图,但从该文件中获取头信息。
所以有很多不同的头信息可以用来影响图表和单个图的外观。要获取所有这些头信息及其可能的值的列表,请使用`M-x eplot-list-chart-headers'命令。
你可以在.plt缓冲区中添加注释 —— 所有以#开头的行都是注释。
eplot-mode
编辑.plt文件的主要模式非常简单。它进行一些字体锁定,然后提供以下命令:
C-c C-c:显示包含渲染图像的缓冲区。 C-c C-e:列出所有不同的头信息并对其进行说明。 TAB:自动完成头信息。
eplot-view-mode
用于显示图表的缓冲区使用另一个简单的主要模式,其中包含一些方便的命令。 C-c C-s:将图像保存到文件。 C-c C-w:指定图像宽度并保存文件。
如果保存为SVG以外的格式,需要使用外部程序"convert"或"rsvg-convert"进行转换。
C-c C-w命令需要"rsvg-convert",因为它会以特定大小渲染SVG图表。这可以避免缩放产生的伪影(模糊等),让您获得任何所需大小的清晰、精美图表。
安装
如果您手动安装(我猜完成后会在ELPA上提供),请在Emacs初始化文件中添加类似以下内容:
(push "~/src/eplot/" load-path) (autoload 'eplot "eplot" nil t) (autoload 'eplot-mode "eplot" nil t) (unless (assoc "\.plt" auto-mode-alist) (setq auto-mode-alist (cons '("\.plt" . eplot-mode) auto-mode-alist)))
根据eplot.el的位置调整您添加到load-path的路径。
API
(可能会有更多内容...)
所有标题都可以通过编程设置默认值,这样您可以定义一个您喜欢的整体外观(然后在需要时使用显式标题覆盖)。
这可以通过eplot-set函数完成:
(eplot-set 'width 600)
(eplot-set 'height 300)
(eplot-set 'font "arial")
(eplot-set 'background-color "#ffe0e0")
(eplot-set 'grid-color "#c0c0c0")
您可以将此内容放在Emacs初始化文件或其他地方,但需要先添加:
(require 'eplot)