看起来 gnuplot 对于 x-grid 和 y-grid 不能有两种不同的 dashstyle。
我目前看到的一种解决方法是在彼此之上绘制两个相同的图。一个带有适当的 x 网格线,另一个带有适当的 y 网格线。
如果您想要比例为(50-25-20-25) 的破折号图案,则这对应于两个抽动之间的(25-25-20-25-25-0) 或(5-5-4-5-5-0)。
此外,破折号和间隙长度数字,例如在dt (50,25,20,25) 中,似乎与图形大小有固定关系。 “经验”因子是 11,具有很好的近似性(至少对于我在 gnuplot 5.2.6 下测试的 wxt 终端)。
编辑: 实际上,下面的代码使用qt 终端给出了不同的结果。这不仅仅是一个不同的因素。如果不深入了解源代码,它会更加复杂并且可能难以解决。因此,以下内容似乎适用于 wxt 终端(甚至可能只是在 Windows 下?)这一事实可能是幸运的。
有了这个,您可以自动创建虚线,从而在主要网格线的交叉点产生十字准线。
假设是:
- 您的第一次和最后一次抽动在边界上
- 你知道 x 和 y 间隔的数量
您还需要知道图形大小。这些值存储在变量GPVAL_TERM... 中,但仅在在 绘图之后。这就是为什么您必须replot 才能获得正确的值。
这种解决方法至少应该在主要网格线的交点处始终提供十字准线。
编辑 2: 只是为了“完整性”。在不同终端上获得相同(或相似)外观的自定义虚线图案的因素差异很大。 wxt 约。 11,qt 约。 5.6,pngcairo约。 0.25。这不是我所期望的。此外,看起来这些因素略微取决于 x 和 y 以及图形大小。为了获得“准确”的十字准线,您可能需要进一步调整这些数字。
代码:
### dashed grid lines with crosshairs at intersections
reset session
TERM = "wxt" # choose terminal
if (TERM eq "wxt") {
set term wxt size 800,600
FactorX = 11. # wxt
FactorY = 11. # wxt
}
if (TERM eq "qt") {
set term qt size 800,600
FactorX = 5.58 # qt
FactorY = 5.575 # qt
}
if (TERM eq "pngcairo") {
set term pngcairo size 800,600
set output "tbDashTest.png"
FactorX = 0.249 # pngcairo
FactorY = 0.251 # pngcairo
}
set multiplot
set ticscale 0,0
Units = 24 # pattern (5,5,4,5,5,0) are 24 units
# set interval and repetition parameters
IntervalsY = 10
RepetitionsY = 1
IntervalsX = 4
RepetitionsX = 3
# initial plot to get graph size
plot x**2
gX = real(GPVAL_TERM_YMAX-GPVAL_TERM_YMIN)/IntervalsY/Units/FactorY/RepetitionsY
gY = real(GPVAL_TERM_XMAX-GPVAL_TERM_XMIN)/IntervalsX/Units/FactorX/RepetitionsX
# first plot with x-grid lines
set grid xtics lt 1 lc rgb "black" dt (gX*5,gX*5,gX*4,gX*5,gX*5,0)
replot
unset grid
# second plot with y-grid lines
set grid ytics lt 1 lc rgb "black" dt (gY*5,gY*5,gY*4,gY*5,gY*5,0)
replot
unset multiplot
set output
### end of code
结果: