Gnuplot 5.2.8:“设置对数刻度”,“设置剪辑”:无行往返于0零〜=〜-inf

问题描述

设置对数刻度y时,与裁剪值无关,没有0值(对应于对数刻度的-infinity)绘制(垂直)线。 例如。在这个(M)WE中:

reset
$DATA << EOD
10
0.1
9
0.01
8
1e-3
7
1e-4
6
1e-5
5
1e-6
4
1e-7
3
1e-8
2
1e-9
1
0
1
10
EOD
set xrange [*:|$DATA|-1]
set xtics 1
set yrange [0.5:*]
set logscale y
set grid
set style data linespoints
plot $DATA
show clip

从(18 | 1)到(19 | 0)以及从(19 | 0)到(20 | 1)都没有画出垂直线。

除了将0值更改为类似1e-99之外,还有其他方法获取这些行吗?

解决方法

您期望什么? log(0)未定义,因此应将这一点放在哪里?

根据您的建议,您可以将0替换为一个较小的值,例如1e-991e-323可能是似乎起作用的最小值。

如果您的数据中有多个0值,并且您不想手动更改数据,但是希望向下绘制一条垂直线,则可以定义一个函数,将0替换为数量很少。

代码:

### replace 0 with some very small value
reset session

$Data << EOD
10
0.1
9
0.01
8
1e-3
7
1e-4
6
1e-5
5
1e-6
4
1e-7
3
1e-8
2
1e-9
1
0
1
10
EOD

set xtics 1
set yrange [0.5:*]
set logscale y
set grid

myZero(n) = n==0 ? 1e-323 : n

plot $Data u 0:(myZero($1)) w lp pt 7
### end of code

结果:

enter image description here