gnuplot脚本:使用相对于文件而不是执行目录的路径?

时间:2018-10-31 15:14:09

标签: gnuplot

我正在与需要绘制的.dat文件所在的文件夹中生成一个Gnuplot脚本,即使它是从另一个目录中调用的,我也希望它能够正常工作。不幸的是,似乎相对路径从称为Gnuplot的目录中起作用,而不是就是脚本文件所在的目录。例如:

gnuplot folder/script.gp
如果文件为folder/data.dat,并且脚本显示plot "data.dat",则

将失败。有什么办法可以解决这个问题?像Gnuplot中的变量一样,包含当前执行脚本的位置?

2 个答案:

答案 0 :(得分:2)

您的目录和文件名之间的分隔符是/,因此我假设您使用的是Linux。这里有以下作品:

  • 如果gnuplot以执行脚本启动,则存在变量ARG0,其中包含在命令行中指定的完整脚本名称。
  • 通过system调用,我们可以将此脚本名称发送回外壳,外壳具有一个dirname命令,用于提取脚本名称的目录部分。
  • 现在,我们可以使用gnuplot内部字符串函数来构建文件路径,尤其是.,它可以连接两个字符串。

您说您有一个gnuplot脚本folder/script.gp和一个数据文件folder/data.txt,然后该脚本应包含以下内容:

print ARG0       # just for debugging
working_directory = system("dirname ".ARG0)."/"
datafile = working_directory."data.dat"
outputfile = working_directory."graph.png"

print datafile   # just for debugging
print outputfile # just for debugging

set terminal pngcairo
set output outputfile
plot datafile w l

如果您位于“文件夹”中,则它也可以工作,然后dirname返回.,结果数据文件将为./data.dat。我尚未检查包含空格的“特殊”目录名称,...我不希望它起作用。

在Debian 9.6上使用gnuplot 5.0.5进行了测试,gnuplot对system使用sh shell。我尚未搜索Windows解决方案。

答案 1 :(得分:1)

set loadpath "wherever/my/stuff/is/"

这可以是绝对目录树,也可以是相对于当前目录的树。

或者,就像在shell命令行上一样,您可以告诉gnuplot

cd "/new/current/directory"

之后,它将是查找文件的第一位。