【问题标题】:Gnuplot multiplot positions all text incorrectly in epslatex terminalGnuplot multiplot 在 epslatex 终端中错误地定位所有文本
【发布时间】:2014-12-20 11:43:57
【问题描述】:

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

我认为使用 set size & 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

生成的图:

【问题讨论】:

  • 您能否将脚本缩减到重现问题所需的最低限度?更改您的脚本以绘制一些简单的函数可能是个好主意,这样其他人就不需要您的数据了。
  • 如果您最终要生成 PDF,为什么不使用具有此功能的终端呢?我建议使用pdfcairo
  • 这些图形被合并到一个 LaTex 文档中,并且该文档使用 latex、bibtex、dvipdf 等进行处理。

标签: latex gnuplot eps


【解决方案1】:

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

如果我使用您的代码,但改为绘制 sin(x),并在终端中使用以下内容:

$ latex file.tex
$ dvipdfm file.dvi

我还发现坐标轴和绘图之间不匹配。

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

$ dvipdf file.dvi

【讨论】:

  • 虽然上面没有提到,但我确实使用 dvipdf 来转换 .dvi 文件。我认为错误是命令的顺序。
【解决方案2】:

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

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

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

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

【讨论】:

  • 这应该是对问题的更新,而不是答案。它包含原始问题中没有的相关信息。
  • reset 放在脚本的开头应该可以正常工作。请注意,这不会影响终端。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多