如何解决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-99
或1e-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
结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。