我有一个数据文件,我想用 gnuplot 绘制它。但是,对于 y 轴,我希望 gnuplot 忽略低于某个值的所有点。有没有一种简单的方法可以做到这一点,尤其是数据文件很大?
问问题
6431 次
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 回答