Gnuplot:更改图中虚线的密度

Gnuplot: Change Density of dotted line in splot

我正在尝试在 Gnuplot 4.6 补丁级别 4 中使用以下代码在一个点内绘制一条虚线:

set terminal "pdfcairo" enhanced dashed size 15,10
set pm3d map
set output "test.pdf"
splot 'map.dat' using 1:(/1000):3 notitle, \
   'line1.dat' using 1:(/1000):1 notitle with lines ls 2, \
   'line2.dat' using 1:(/1000):1 notitle with lines ls 2
unset output

热图有效,line1.dat 也有效。然而,第二条线看起来大多是实线。不同之处在于 line1.dat 有 70 个条目,而 line2.dat 有 900 个。第二行在两点之间有一个跳转,并在那里用虚线表示。

有人知道如何改变点密度,使整条线看起来都是点状的吗?更改原始数据文件不是一种选择。

感谢您的帮助,

没有

编辑:

我找到的一个解决方法是

splot 'line2.dat' every ...

但这在数据跳跃时会变得不方便。

使用 every 关键字,如下所示:

'line2.dat' every 20 using 1:(/1000):1 notitle with lines ls 2

命令(s)plot 'line.dat' with lines首先绘制数据点,然后使用具有相应线型的线连接数据点。如果数据点彼此太靠近,则在使用虚线样式时没有地方留出一些间隙。

要显示dotted/dashed行,可以尝试用函数替换点或减少点数。

  • 尝试用虚线代替虚线。线型和线色可以独立设置:splot 'line.dat' with lines ls 0 lc 2。对于这种方法,900 分可能太多了。

  • 拟合一个函数可以,但可能很难找到合适的函数。

  • every选项减少点数

  • 减少点数的另一种可能性是使用 smooth 选项对点进行插值。这需要一个临时文件并按如下方式工作:

    # [prepare plot]
    set samples 100
    set table "line2.dat.tmp"
    plot 'line2.dat' using 1:(/1000) smooth mcsplines with lines ls 2 
    unset table
    
    set terminal "pdfcairo" enhanced dashed size 15,10
    set pm3d map
    set output "test.pdf"
    
    # [plot]
    splot 'map.dat' using 1:(/1000):3 notitle, \
       'line1.dat' using 1:(/1000):1 notitle with lines ls 2, \
       'line2.dat.tmp' using 1:2:1 notitle with lines ls 2
    
    unset output
    

在 [prepare plot] 部分创建了一个临时文件 "line2.dat.tmp",其中包含插值 line2.dat 的数据点。您必须玩 set samples 才能获得正确的分数。在示例中,我们有 100 个等距点,而不是 900 个不同距离的点。 选项 smooth mcsplines 保留原始数据点的单调性和凸性,参见 gnuplot shell.

中的 help smooth mcsplines

在 [plot] 部分中,原始 "lines2.dat" 被插值数据替换。

如果原始数据足够平滑,用 100 点替换 900 点不会跳过重要信息,则此方法有效。也许您想在一个图表中绘制 "lines2.dat" 和 "lines2.dat.tmp" 以比较它们。