LaTeX插图 (data plot)方法漫谈:由pgfplots引起

来源:互联网 发布:淘宝买家删差评 编辑:程序博客网 时间:2024/06/06 01:39

1 引子

最初感受到在LATEX中插图是一个问题,是在我刚学习LATEX的时候。注意本文所谈论的插图,指的是由数据生成的图,比如曲线图 (line plot)、散点图 (scatter plot)、柱状图 (bar plot)等,不包括数字图像、扫描的位图等。

当时我在Visio中画了一个图,需要在其中加上特别的字符,须与论文中利用LATEX命令产生的字符一致。在Visio中找不到那个字符,我也向周围的好多人请教,也没有答案。到现在我才有一个清晰的答案。Visio中画出的图,用术语来说称为Drawing,不属于本文讨论的对象。我只是把它作为引子,引起大家的重视,不要把在LATEX的插图问题想象的太简单。

2 各方法漫谈

LATEX文档中插入数据图的方法可以分为两种:一是利用专门的软件生成一定格式的数据图,然后将该图导入到LATEX中,常用的格式有pdf和eps;另外一种是由LATEX引擎本身产生,所利用的包为pgfplots。我们可以将上述两种方法分别称为外部图法、内部图法。

外部图法使用的比较广泛,其产生早于内部图法。现在还有好多人倾向于使用该法。只要你对产生外部图的专门工具比较熟,那就使用外部法,没必要为了插图而专门学习内部图法,因为pgfplots有自己的语法格式,这就相当于又学习了一门语言。而内部图法也有自己的优势,那就是产生的图与最终的文档紧密结合,不产生中间格式的图片文件,占用的磁盘空间小,支持在数据图中加入任何LATEX提供的特别字符。内部图法的特殊字符支持这一个优势特别好,因为LATEX可以说是支持显示特殊字符的最好的语言,没有之一,其他专门产生外部图的语言所支持的特殊字符根本没法语LATEX相比。在读一些论文中,我也发现,论文中正文的一些特殊字符是很规范的希腊字符,而相应的图片中的字符却变成了罗马格式的字符。这样让整个论文的看起来不协调,影响了论文的质量。作者本人肯定也知道这个问题,可能是苦于没有好的解决办法,或者没有进一步深究该问题。该论文发表的档次也不低。而内部图法则很多解决了特殊字符显示的问题。

显然,产生外部数据图的那些语言也在发展,好多已经将LATEX的产生特殊字符的语法融合了进来,例如,Matlab、R语言等,这样就扩大了它们各自的使用范围。至于Python语言支不支持LATEX的特殊字符语法,我没有去了解。这是一个可喜的发展,能让我们在绝大部分情况下得到需要的图。注意,Matlab、R和Python都能产生pdf、eps格式的图形,使用起来也方便。数据图重要的是先要有数据,通常情况下,有了原始数据后往往还需要进一步的处理,从中再产生一些新的数据信息。在这种情况下,外部图法就体现出它的优势了。Matlab、R、Python等本身就一种功能强大的编程语言,它们都具备强大的数据运算能力,因此,利用这几种语言产生数据图前,你可以加入自己想要的运算,然后在生成最终的数据图。整个过程一气呵成,比较顺畅。但是,这不能成为否定内部图法的一个借口。你可以利用Python等语言将原始数据运算成自己需要的最终数据,再将最终数据交给LATEX画,这也能达到同样的效果。这看起来好像多了一道,具体采用哪种方法,就只能取决于作者个人的偏好了。

我赞赏内部图法的简洁优雅、协调一致,也惊叹外部图法的方便灵活,功能强大。完成同一个任务存在着方法的多样性,这就是整个世界丰富多彩的原因。最终方法的选定由用户来定。

我的建议是:只要能满足自己的需求,就采用外部法;当个别情况不满足时,才去求助于内部图法

3 使用举例

3.1 内部法举例

这要使用包pgfplots,看代码示例1:

\usepackage{pgfplots}\usepackage{tikz}\begin{tikzpicture} \begin{axis}[width=8cm, height=6cm, tick align=outside]   \addplot[draw=blue] coordinates {(0,1) (1,1) (2,3) (3,2) (4,2)};   \addlegendentry{Line 1}   \addplot[draw=red] coordinates {(0,0) (1,4) (2,4) (3,3) (4,3)};   \addlegendentry{Line 2} \end{axis} \end{tikzpicture}

运行结果如下:
这里写图片描述

3.2 外部图法举例

这里举一个R语言产生eps格式图的例子。利用R语言产生eps图有两种方法:一种方法比较简便,在所产生的图上面点击右键,然后再点击save as postscript…,最后就产生了eps 格式的文件,如下图:
这里写图片描述
另一种方法为:

 >postscript("xx.ps") >画图代码 >dev.off()

就会生成一个图片文件xx.ps。

有了外部图片文件,接下来就可以使用LATEX代码将其载入了。载入代码想必对LATEX熟的人都知道,但为了本文的完整性,给出加载外部图片的代码,如下:

\usepackage{graphicx}...\begin{figure}[tbp]    \centering    \includegraphics{xx.eps}    \caption{Sysu logo}    \end{figure}

  1. 该例子代码来源于书籍《Latex and friends》(M.R.C. van Dongen. Heidelberg: Springer, 2012)第131页。 ↩
0 0