首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GNUPLOT :将数据导入gnuplot脚本的更好方法

GNUPLOT :将数据导入gnuplot脚本的更好方法
EN

Stack Overflow用户
提问于 2019-02-02 14:50:14
回答 2查看 345关注 0票数 2

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

代码语言:javascript
复制
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部分,我将如下所示

代码语言:javascript
复制
gnuplot -e "ifilename='data/points_data1.dat'; ofilename='plot1'" chart.gp

但它把错误抛在脑后

代码语言:javascript
复制
"chart.gp" line 8: undefined variable: ifilename

它指的是这一行

代码语言:javascript
复制
filename = ifilename

我想这可能是因为在解析两个=符号时遇到了一些困难,所以我删除了这一行,并像下面这样重写了shell脚本

代码语言:javascript
复制
gnuplot -e "filename='data/points_data1.dat'; ofilename='plot1'" chart.gp

但这一次它抛出了以下错误

代码语言:javascript
复制
"chart.gp" line 8: undefined variable: filename

真正起作用的是

代码语言:javascript
复制
echo "data/points_data$i.dat" | gnuplot chart.gp

在这里,我将行filename = ifilename替换为

代码语言:javascript
复制
FILE = system("read filename; echo $filename") 

以及filename的每个实例,以及FILE.gp脚本中的应用。

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

所以我想知道,是否有更好的方式将shell输入到gnuplot脚本中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-02 16:33:58

代码语言:javascript
复制
FILE = system("read filename; echo $filename") 

其实也没问题。

如果您想将输出输送到某个文件,可以省略set output "something.png"

相反,您可以通过运行这样一个脚本直接将.png输出发送到stdout

代码语言:javascript
复制
#!/usr/bin/env gnuplot

reset session

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

然后,您可以将输出传输到这样的.png文件中

代码语言:javascript
复制
./chart.gp > mypng.png

所以最后的命令应该如下所示

代码语言:javascript
复制
echo "data/points_data$i.dat" | gnuplot chart.gp > plot$i.png
票数 0
EN

Stack Overflow用户

发布于 2019-02-02 17:37:52

你原来的命令几乎起作用了。调用

代码语言:javascript
复制
gnuplot -e "ifilename='data/points_data1.dat'; ofilename='plot1'" chart.gp

正确定义输入和输出文件名。但是,通过发出命令,您在chart.gp脚本中击溃了它们。

代码语言:javascript
复制
  reset session

它清除所有变量定义,包括您特别想要的变量定义。从脚本中删除该行,您应该会没事的。如果“重置会话”命令的目的是确保没有使用系统范围的或私有的初始化文件,那么在命令行上用"-d“替换它:

代码语言:javascript
复制
  gnuplot -d -e "ifilename='data/points_data1.dat'; ofilename='plot1'" chart.gp
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54494152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档