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

72 篇文章 3 订阅
44 篇文章 0 订阅

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页。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值