如何在Gnuplot(epslatex)中使用fillcurve时删除未知的切口?

时间:2014-04-06 04:41:01

标签: latex gnuplot eps

我现在正尝试在gnuplot 4.6,patchlevel 1中使用filledcurve。以下显示示例脚本:

set term epslatex
set output "figure.tex"

set xlabel "\\huge{x-axis}"
set ylabel "\\huge{y-axis}"
set format xy "\\LARGE{%.0f}"
set xrange [0.0:10.0]
set yrange [0.0:100.0]
set xtics 2.0
set ytics 20.0
set xtics offset 0, -0.3

f1(x) = x**1
f2(x) = x**2
f3(x) = x**3

set nokey
plot '+' using 1:(f2($1)):(f3($1)) with filledcurve lt 1 lc rgb "gray60",\
     '+' using 1:(f1($1)):(f2($1)) with filledcurve lt 1 lc rgb "gray40",\
     '+' using 1:(0.0):(f1($1))    with filledcurve lt 1 lc rgb "gray20"

我不知道为什么,但似乎酒吧之间有白色恼人的缝隙。即使我增加set samples的数量,它也无法摆脱。

有什么想法删除这些裂缝吗?

enter image description here

1 个答案:

答案 0 :(得分:3)

不幸的是,这是与绘制相邻填充多边形相关的查看器问题,另请参阅problematic Moire pattern in image produced with gnuplot pm3d and pdf output或错误报告#1259 cairolatex pdf fill patterns

在您的情况下,您可以使用解决方法:

如果using语句中只有两列,则该区域将绘制为闭合多边形,并且不会显示这些工件(filledcurves closed)。因此,您必须填充每条曲线与x1轴之间的区域(使用filledcurves x1)。

由于剪切超出y范围的曲线存在错误,您必须自己剪切f3曲线(即使用f3($1) > 100 ? 100 : f3($1))。此错误已在开发版本中修复。

所以你的脚本是:

set term epslatex standalone
set output "figure.tex"

set xlabel "\\huge x-axis"
set ylabel "\\huge y-axis"
set format xy "\\LARGE %.0f"
set xrange [0.0:10.0]
set yrange [0.0:100.0]
set xtics 2.0
set ytics 20.0
set xtics offset 0, -0.3

f1(x) = x**1
f2(x) = x**2
f3(x) = x**3

set nokey
plot '+' using 1:(f3($1) > 100 ? 100 : f3($1)) with filledcurve x1 lt 1 lc rgb "gray60",\
     '+' using 1:(f2($1)) with filledcurve x1 lt 1 lc rgb "gray40",\
     '+' using 1:(f1($1)) with filledcurve x1 lt 1 lc rgb "gray20"

set output
system('latex figure.tex && dvips figure.dvi && ps2pdf figure.ps')

结果(使用4.6.1):

enter image description here

另请注意,像\huge这样的LaTeX命令不接受参数,而是切换。测试例如\huge{A}BC,这将使所有字母变得巨大。通常,您必须使用\huge等括号限制{\huge ABC}的范围,但如果整个标签受到影响,则使用set xlabel "\\huge x-axis"就足够了。这并不会改变你的情况,但在其他情况下可能会给你带来麻烦:)