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" 以比较它们。
我正在尝试在 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" 以比较它们。