Gnuplot multiplot在epslatex终端中错误地定位所有文本

时间:2014-12-20 11:43:58

标签: latex gnuplot eps

我正在尝试使用gnuplot的多重绘图功能在主图上创建插图。除了轴标签之外,我可以使用term ='wxt'完全按照我的要求生成绘图,轴标签需要LaTeX格式才能生成所需的符号。当我向term ='epslatex'提交相同的命令时,绘图很好,但所有文本(轴和标记标记)都定位不正确。

我想用的是套装尺寸& origin命令可能会混淆epslatex终端输出,所以我尝试使用layout命令并将这些图并排绘制,以查看文本是否可以正确打印。它没。

我正在使用gnuplot 4.6补丁4和Linux Mint 17。

我的脚本如下。注释部分表示原始脚本使用set size和origin命令手动将第二个绘图作为插图放置,而不是并排放置。

set term epslatex color font ",16"
unset key
set termoption dash
set style line 1 lc rgb 'blue' lw 2 lt 1
set style line 2 lc rgb 'red'  lw 2 lt 3
set style line 3 lc rgb 'green' lw 2 lt 5
set style line 4 lc rgb 'magenta' lw 2 lt 7
set style line 5 lc rgb 'black' lw 1 lt 0
set output "gr-thresholds.tex"
#set size 1,1
# set multiplot
set multiplot layout 1,2
# bigger plot
set autoscale
set ytics scale default autofreq
set xrange[0:14]
set yrange[0:1.7]
set xlabel 'r (\AA)'
set ylabel '$g(r)$'
#set size 1,1
#set origin 0,0
plot "foo1.csv" w l ls 2, \
"foo2.csv" w l ls 3 , \
"foo3.csv" w l ls 1, \
"foo4.csv" w l ls 4
#small inset
#set size 0.4, 0.4
#set origin 0.5,0.15
set xrange[1.2:2.2]
set yrange[0:0.8]
set ytics 0, 0.2, 2
set xlabel ""
set ylabel ""
plot "foo1.csv" w l ls 2, \
"foo2.csv" w l ls 3 , \
"foo3.csv" w l ls 1, \
"foo4.csv" w l ls 4
unset multiplot
set output

生成的数字:Bad figure

2 个答案:

答案 0 :(得分:0)

生成pdf的方式可能有问题。两个命令dvipdfmdvipdf会产生不同的结果。

如果我接受你的代码,而是绘制sin(x),并在终端中使用以下内容:

$ latex file.tex
$ dvipdfm file.dvi

我也发现轴和图之间不匹配。

如果我使用dvipdf,但一切看起来都很好:

$ dvipdf file.dvi

答案 1 :(得分:0)

确定,   根据Tom Fenech的建议,我制作了一个最小代码示例来重现错误,并且出现的问题是机器状态问题。为了生成我的图表,我运行了两次脚本,一次使用术语wxt,然后再次使用术语epslatex。

问题是某个地方gnuplot环境的状态发生了变化,并且没有被这个脚本重置。具体来说,第一次通过,文本标签的默认位置是正常的。第二次,范围和标签仍然附加到最后一个图的大小和原点,即插图。我认为这是由于命令设置原点/大小相对于x / ylabel和x / y范围的顺序,但只需运行以下代码两次而不重新启动gnuplot将生成两个不同的图。第一次正是我想要的,第二次会扭曲标签,如上所示。

所以我有一个“解决方案”,但它很脆弱。如果有人可以解释我需要做什么来使这个脚本多次运行而不重新启动,我将不胜感激。 干杯, --Jim

set term epslatex color font ",16"
unset key
f(x) = sin(x)
set output "sin.tex"
set multiplot
set size 1,1         
set origin 0,0       
set xrange[0:14]     
set yrange[0:6]
set xlabel 'r (\AA)'
set ylabel '$g(r)$'
plot f(x)
#small inset
set size 0.4, 0.4
set origin 0.5,0.15
set xrange[1:3]
set yrange[0:4]
set ytics 0, 0.2, 2
set xlabel ""
set ylabel ""
plot f(x)
unset multiplot
set output