3

我有一个数据文件,我想用 gnuplot 绘制它。但是,对于 y 轴,我希望 gnuplot 忽略低于某个值的所有点。有没有一种简单的方法可以做到这一点,尤其是数据文件很大?

4

1 回答 1

9

有(至少)两种方法,无需依赖外部工具。

IGNORE_BELOW=50
set yrange [IGNORE_BELOW:]  #ignore points below 50, but your yrange will start at 50.

第二种方法是在 using 语句中使用 gnuplot 三元运算符。请注意,gnuplot 在执行文件 IO 时会默默地忽略未定义的值 (1/0)。

IGNORE_BELOW=50
filter(x)=(x>=IGNORE_BELOW)?(x):(1/0)
plot 'mydatafile.dat' u 1:(filter($2))

这假设您有一个空格分隔的数据文件,并且您希望在 x 轴上绘制第一列,在 y 轴上绘制第二列(以典型的 gnuplot 方式)。

第一种方法最简单,但它不允许您修剪要绘制的范围内的点。第二种方式有点丑,但更通用,可以用来为gnuplot数据制作各种输入过滤器。

当然,如果您的 gnuplot 支持管道并且您想使用外部工具编写过滤器,您也可以这样做。只需工具接受数据文件作为输入并将修改后的数据写入标准输出。然后在gnuplot中:

plot "< mytool.ext mydatafile" ...

对于这个问题,awk将是一个很好的工具。

于 2012-06-11T13:08:38.067 回答