如何使虚线与gnuplot中的十字准线相交?

时间:2019-04-11 04:59:18

标签: gnuplot line gridlines

我正在绘制一些数据,我想使用虚线网格线。

任何虚线网格都可以,但是我更喜欢“长破折号,短破折号,长破折号”格式。

例如,给出以下代码

set grid lc rgb "#000000" lt 1 dt (50, 25, 20, 25)
plot x**2

我得到这个结果 plot x**2 naive approach

但是我希望网格线相交总是发生在两个破折号的中间,像这样

grid lines intersecting appropriately

如果我可以使水平网格线与垂直网格线不同,并且可以为每个网格线添加一些偏移量,那么我想可以找到一种方法来实现这一点。但我似乎也无法做到这一点。

2 个答案:

答案 0 :(得分: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

但是,这留下了垂直网格线。 enter image description here

答案 1 :(得分:2)

看来gnuplot不能为x-grid和y-grid使用两种不同的短划线样式。 我目前看到的一种解决方法是在彼此顶部绘制两个相同的图。一个带有适当的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下运行)的事实可能是幸运的。

这样,您可以自动创建虚线,从而在主要网格线的相交处产生十字准线。

假设是:

  1. 您的第一个和最后一个抽动症在边界上
  2. 您知道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

结果:

enter image description here