gpt4 book ai didi

gnuplot - 如何使网格虚线相交,在 gnuplot 中制作十字线?

转载 作者:行者123 更新时间:2023-12-02 03:17:48 24 4
gpt4 key购买 nike

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

任何虚线网格线就足够了,但我更喜欢“长破折号,短破折号,长破折号”格式。

例如,给出以下代码

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

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

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

grid lines intersecting appropriately

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

最佳答案

看起来 gnuplot 不能为 x 网格和 y 网格提供两种不同的 dashstyle。我目前看到的一种解决方法是在彼此之上绘制两个相同的图。一个具有适当的 x 网格线,另一个具有适当的 y 网格线。

如果您想要比例为 (50-25-20-25) 的破折号图案,则对应于 (25-25-20-25-25-0) code> 或 (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...中,但仅在绘图之后存储。这就是为什么您必须重新绘制才能获得正确的值。

此解决方法至少应始终在主要网格线的交叉点处提供十字准线。

编辑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

关于gnuplot - 如何使网格虚线相交,在 gnuplot 中制作十字线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55625024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com