GNUPLOT:管道数据的一种更好的方式进入gnuplot的脚本

问题描述 投票:2回答:2

我有这样一个gnuplot的脚本(简体)

reset session

set terminal pngcairo enhanced font "Times,25" size 800,400

filename = ifilename

stats filename nooutput

N = STATS_columns
M = STATS_records

set angles degrees
set size square 1.25,1

set output ofilename

# does some stuff
...
...
...

set parametric  

plot \ 
    for [i=2:N] filename u (posX($0, column(i))):(posY($0, column(i))) w p ps 1.2 pt 7 lc rgb lcolor(i-2)

我想要做的就是通过一个shell脚本定义ifilename(输入文件)和ofilename(输出文件)。

所以,我认为-e命令可能只是一个作业。

所以对我发怒这个脚本的gnuploat部分

gnuplot -e "ifilename='data/points_data1.dat'; ofilename='plot1'" chart.gp

但它扔了错误

"chart.gp" line 8: undefined variable: ifilename

这是指这条线

filename = ifilename

我想也许是因为它有一些麻烦,分析过程的两个=迹象所以我删除该行并改写了我的shell脚本这样

gnuplot -e "filename='data/points_data1.dat'; ofilename='plot1'" chart.gp

但这次它扔了以下错误

"chart.gp" line 8: undefined variable: filename

什么实际工作是这样的

echo "data/points_data$i.dat" | gnuplot chart.gp

在那里我取代了线filename = ifilename

FILE = system("read filename; echo $filename") 

并与filename脚本FILE .gp的每一个实例。

但我不知道如何使用语法来还定义了输出文件。


所以我想知道,是否有管道外壳输入一个更好的方式进入gnuplot的脚本?

shell gnuplot
2个回答
0
投票
FILE = system("read filename; echo $filename") 

实际上是罚款。

如果您想管道输出到一些文件,你可以省略set output "something.png"

而是你可以只直接通过运行一个这样的脚本发送.png输出stdout

#!/usr/bin/env gnuplot

reset session

set terminal pngcairo enhanced font "Times,25" size 800,400
...

那么你就可以通过管道将输出到像这样的.png文件

./chart.gp > mypng.png

所以,最终命令是这个样子

echo "data/points_data$i.dat" | gnuplot chart.gp > plot$i.png

1
投票

您原来的命令几乎工作。调用

gnuplot -e "ifilename='data/points_data1.dat'; ofilename='plot1'" chart.gp

正确地定义的输入和输出文件名。但后来通过发出命令重挫他们chart.gp脚本中

  reset session

它清除所有的变量定义,包括你特别想要的人。取下脚本行,你应该罚款。如果“复位会话”命令的目的是为了确保没有系统范围内的或私有初始化文件中,然后在命令行上的“-d”替换为:

  gnuplot -d -e "ifilename='data/points_data1.dat'; ofilename='plot1'" chart.gp
© www.soinside.com 2019 - 2024. All rights reserved.