gnuplot:在绘制图形点和刻度之前绘制网格

3

我在绘制图表时遇到了问题,希望将网格线绘制在图表后面并保持轴标记在其前面,即使数据点靠近轴也是如此。

考虑以下示例数据,命名为“t_data”:

   0   1
   1   3
   1.8 0
   3   5
   4   0
   5   2

并且这个脚本:

reset session

set terminal pdfcairo enhanced color font "Arial,10" size 7.5cm,6cm

set output "t_graph.pdf"

set style line 1 lc rgb "#ff0000" lw 1 pt 5 ps 0.5 pi -1
set pointintervalbox 0.7

unset key
unset title
unset border

set border 3
set xrange [0:5]
set yrange [0:*]

set xtics border nomirror out font "Arial,9"
set ytics border nomirror out font "Arial,9"

set mxtics 5
set mytics 5

set xlabel "x"
set ylabel "y"

set grid xtics mxtics ytics back lt -1 lw 1 lc rgb "#808080", lt -1 lw 1 lc rgb "#808080" dt 2
set tics front

plot "t_data" u 1:2 w lp ls 1

set out

为了让刻度标记出现在数据点的前面,例如在x=0, 24处,我阅读了这里(gnuplot: fill area curve keeping tics on top)的建议,使用set tics front命令放置在plot命令之前,如脚本所示。然而,这似乎会覆盖我给set grid命令设置的选项back,即网格也会绘制在我的图形上(当我在执行上述脚本后运行show grid时,它甚至显示Grid drawn at front)。
当我交换set gridset tics命令时,网格和刻度标记都在绘图点的后面绘制,从而部分遮挡了主要刻度标记并完全遮挡了次要刻度标记(请注意,无论如何轴线仍绘制在绘图点的上方)。
有人能帮我找到方法,让网格出现在绘图点的后面,并且刻度标记出现在它们的前面吗(我认为以这种方式绘制图形最有意义,但这实际上只是我的个人看法)? 我也非常好奇为什么set ticsset grid命令似乎会相互影响。
我在OpenSUSE 42.3 LTS上使用gnuplot版本5.0 patchlevel 0
1个回答

3
我认为这个问题在 Gnuplot 的 5.0.2 版本中得到了解决。相应的 更新日志 如下所述:

2015-11-09 Ethan A Merritt

  • src/axis.c src/axis.h src/graphics.c src/save.c src/set.c src/show.c src/unset.c:文档中说明“set tics front or back 可以控制刻度线是放置在网格线前面还是后面”,这有点道理,但实际上它是通过将整个网格与刻度线一起移动来实现的,因此你不能完全将刻度线和刻度标签放在网格线前面。将这两个操作分离开来,使set tics {front|back}只执行其文档所述的操作。Bug #1704

  • src/axis.c (gen_tics):"set {*}tics rangelimit"同样适用于小刻度线和主刻度线。Bug #1705


谢谢!我刚刚将我的gnuplot更新到版本5.2.5,现在它可以正常工作了。我没有明确检查它是否已经在版本5.0.2中工作,但我仍然会将其标记为正确的。 - Lt. Frank Drebin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接