keywords: linux, MacOS, gnuplot, marco, line, margin, epslatex, pdfcario

作为科学民工,总归要把工作成果写成论文发表。 我个人使用 LaTeX 进行写作,也用 LaTeX 进行修改批注。 对于图片, 我也许不像你一样, 使用 OriginLab 来进行图形的可视化处理。 我使用的是 gnuplot, 因为对我而言它更加的强大,方便且专业 (这里不讨论 gnuplot 怎么牛逼, 因为我主要想介绍我自己常用的两个宏文件)。

在使用 gnuplot 的时候,我们通常需要在正式 plot 之前进行一些“琐碎”的设定, 比如, canvas 的留白, canvas 的比例, 线型的选择(粗细及颜色), 字体大小, 是否需要使用 LaTeX 来进行公式编辑, 图片输出格式等。

基本上,人的审美在一段时间内是不会变的,所以你在一段时间内会保持以上的“琐碎”设定一致。 这样一来就没有必要每次绘图的时候都手动输入一次; 而且保持所有 canvas 一致也会使文章更美观,不会出现左右两侧图不对齐。

下面我介绍我自己常用的通用的两个宏(或者叫它头文件), 其中一个是在输出 tex 文件的时候使用的。 因为在有些图中,我需要有很复杂的数学符号表示, 所以需要 set terminal to epslatex


set macros
TeX = "set terminal epslatex color solid standalone 'ptm' 14 \
header '\\usepackage{xcolor,amsmath,siunitx}'"

# line style and margin definitions for gnuplot

set style line 1 lt 1 lc rgb "black" lw 3
set style line 2 lt 2 lc rgb "red" lw 3
set style line 3 lt 5 lc rgb "dark-blue" lw 6
set style line 4 lt 2 lc rgb "orange" lw 6
set style line 5 lt 3 lc rgb "dark-green" lw 3
set style line 6 lt 3 lc rgb "yellow" lw 3

set style line 10 lt 1 lc rgb "black" lw 6

set style line 11 lt 1 pt 5 lc rgb "black" lw 4.5
set style line 12 lt 2 pt 7 lc rgb "red" lw 4.5
set style line 13 lt 8 pt 9 lc rgb "dark-blue" lw 4.5
set style line 14 lt 8 pt 13 lc rgb "dark-orange" lw 4.5

set pointsize 2
set size 1,0.8
set origin 0,0
set size ratio 0.55
set lmargin 3.5
set rmargin 1.0
set tmargin 1.5
set bmargin 3.0

其中, 我首先需要使用 epslatex 的输出形式,然后将字体设置为 Times-Romans, 同时加载 LaTeX 中的 xcolor, amsmath, siunitx 包。

  1. xcolor, 主要是为了使用 LaTeX 中的颜色
  2. amsmath, 是为了输入数学符号及公式
  3. siunitx, 是为了 SI 单位的标注化输入

线型方面,我自己记不住 gnuplot 中的对应,我每次需要另外开一个窗口然后输入 test 来看一眼。 所以我自己定义 1 2 3 4 5 6 等的线性,并且设定 line type, line color, line width, 标记大小等, 这样对我自己而言简单省事又漂亮。 因为我自己认为在简单的图形输出中,漂亮的线型、颜色、标记就那么几种。

留白上面,以上比例也是我自己觉得在 tex 输出中比较合适的, 图形够大又一目了然。

还有一些情况下, 你不得不用 pdf 的输出模式。 我个人而言,如果不是情非得已, tex 输出是我不二的选择。 但是在有一些情况下, 我必须选择一种别的方式。 比如, 在我的一篇文章中,我需要输出两个密度函数, 并且这两个函数有一些区域重叠, 所以需要有 transparent 的特性。 如果我使用 epslatex 输出, 是不会有 transparent 的效果的。 在这种情况下,我会使用 pdfcairo 输出模式

下面的宏文件是我自己觉得在使用 pdfcairo 输出时比较合适的配置。


set macros
PDF = "set terminal pdfcairo enhanced color font 'Times-New-Roman,22' size 12.2cm,8.4cm"

# line style and margin definitions for gnuplot

set style line 1 lt 1 lc rgb "black" lw 3
set style line 2 lt 2 lc rgb "red" lw 3
set style line 3 lt 5 lc rgb "dark-blue" lw 6
set style line 4 lt 2 lc rgb "orange" lw 6
set style line 5 lt 3 lc rgb "dark-green" lw 3
set style line 6 lt 3 lc rgb "yellow" lw 3

set style line 10 lt 1 lc rgb "black" lw 6

set style line 11 lt 1 pt 5 lc rgb "black" lw 4.5
set style line 12 lt 2 pt 7 lc rgb "red" lw 4.5
set style line 13 lt 8 pt 9 lc rgb "dark-blue" lw 4.5
set style line 14 lt 8 pt 13 lc rgb "dark-orange" lw 4.5

set pointsize 2
set size 1,1
set origin 0,0
set size ratio 0.7
set lmargin 3.5
set rmargin 1.0
set tmargin 1.5
set bmargin 3.0

与 epslatex 主要不同的在于留白和画布的设置上, 线型的配置是一样的。

你可以将两个宏文件保存到叫“模板”的文件夹中 (假设我把他们命名为 macro.gp)。 最后在需要绘制图形时, 直接加载他们, 比如


#!/usr/bin/gnuplot -persist

load '$PATH/macro.gp'

@TeX

set output 'function.tex'

plot x/sin(x)

set output

就可以得到如下的图形 (注意输出得到的 function.tex 需要有 pdflatex function.tex 的执行命令才会得到图片function)


gnuplot function.gp

pdflatex function.tex

!点我 function 点我!

如果你需要将输出格式设定为 PDF, 你不需要输入很长的一串命令 set terminal pdfcairo …… 你只需要将 @TeX 变成 @PDF 就可以了,因为我们已经在 宏文件中定义了 TeX = ” 和 PDF =” (具体请看上面的代码)

如果你老板很龟毛, 需要在图片上改这改那,你只需要稍微修改这个 function 的 script 就好了,不需要打开图形软件,然后很痛苦的回忆 自己当初是怎么画的然后再做相应修改。

 

祝 每个科研民工 身体健康!

 

Leave a comment