如何在gnuplot中创建十字准线使虚线网格线相交?
我正在绘制一些数据,我想使用虚线网格线 任何虚线网格线都可以,但我更喜欢“长划线、短划线、长划线”格式 例如,给定以下代码如何在gnuplot中创建十字准线使虚线网格线相交?,gnuplot,line,gridlines,Gnuplot,Line,Gridlines,我正在绘制一些数据,我想使用虚线网格线 任何虚线网格线都可以,但我更喜欢“长划线、短划线、长划线”格式 例如,给定以下代码 set grid lc rgb "#000000" lt 1 dt (50, 25, 20, 25) plot x**2 我得到这个结果 但我宁愿网格线相交总是发生在两条虚线的中间,就像这样 如果我可以使水平网格线不同于垂直网格线,并且可以为每一条网格线添加一些偏移量,那么我可以想象有一种方法可以实现这一点。但我似乎也不能那样做。不太可能。我能想到的最接近的是 set
set grid lc rgb "#000000" lt 1 dt (50, 25, 20, 25)
plot x**2
我得到这个结果
但我宁愿网格线相交总是发生在两条虚线的中间,就像这样
如果我可以使水平网格线不同于垂直网格线,并且可以为每一条网格线添加一些偏移量,那么我可以想象有一种方法可以实现这一点。但我似乎也不能那样做。不太可能。我能想到的最接近的是
set grid x y mx my
set grid lt -1 lc "black" lw 1 , lt -1 lc bgnd lw 16
set ticscale 1.0, 0.01
set mxtics 4
plot x**2 lw 2
但这会使垂直网格线保持不变。
对于x-grid和y-grid,gnuplot似乎不能有两种不同的DashStyle。 我目前看到的一种解决方法是在彼此的顶部绘制两个相同的绘图。一个具有适当的x轴网线,另一个具有适当的y轴网线 如果您想要比例为
(50-25-20-25)
,则这对应于两个TIC之间的(25-25-20-25-25-0)
或(5-5-4-5-5-0)
。
此外,破折号和间隙长度数字,例如indt(50,25,20,25)
,似乎与图形大小存在固定关系。“经验”因子为11,具有良好的近似性(至少对于我在gnuplot 5.2.6下测试的wxt终端而言)
编辑:实际上,下面的代码使用qt
终端给出了不同的结果。这不仅仅是一个不同的因素。如果不深入了解源代码,它会更加复杂,可能很难解决。因此,以下内容似乎适用于wxt
terminal(甚至可能在Windows下?),这可能是一个幸运的发现
使用此选项,可以自动创建虚线,从而在主栅格线的交点处生成十字光标
假设是:
GPVAL\u TERM…
中,但仅在打印后。这就是为什么您必须replot
才能获得正确的值
此解决方案至少应始终在主栅格线的交点处提供十字光标
编辑2:只是为了“完整性”。在不同端子上获得相同(或类似)外观的自定义虚线图案的因素差异很大<代码>wxt约11,qt
约5.6,pngcairo
约0.25。这不是我所期望的。此外,这些因素似乎略微取决于x和y以及图形大小。为了获得“精确”的十字准线,您可能需要进一步调整这些数字
代码:
结果:
我可能有问题,因为在我的例子中,运行该代码时,生成的绘图同时具有垂直和水平实线。不知何故,grid的第二个命令覆盖了前一个命令。尝试设置grid x y mx my lt-1 lc“black”lw 1,lt-1 lc bgnd lw 16以查看@Ethan所描述的效果。哦,这就成功了。现在我明白了,它将白线叠加在黑线之上。很好,我不知道lt-1(默认边框lt)和颜色规范“bgnd”。太棒了!这就行了。可惜它在qt终端上不起作用。所以,首先,我们应该提交一个bug吗?哪里相同的代码应该独立于终端给出相同的结果。也许,您可以对qt终端进行调整,但我到目前为止还没有成功。你说得对,我也希望这也能在其他终端上使用。如果你想提交一个bug报告,你可以在这里这样做:也许我们会从开发者那里得到一些响应。另一方面,使用
pngcairo
或最有用的终端是行不通的。具体来说,pngcairo不接受dt(长度、空间、长度、空间)
语法。它可能不是一个bug,但应该是。真烦人,结果我错了。它确实接受了这一点,但比例远不明显。
### 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