我正在与需要绘制的.dat
文件所在的文件夹中生成一个Gnuplot脚本,即使它是从另一个目录中调用的,我也希望它能够正常工作。不幸的是,似乎相对路径从称为Gnuplot的目录中起作用,而不是就是脚本文件所在的目录。例如:
gnuplot folder/script.gp
如果文件为folder/data.dat
,并且脚本显示plot "data.dat"
,则将失败。有什么办法可以解决这个问题?像Gnuplot中的变量一样,包含当前执行脚本的位置?
答案 0 :(得分:2)
您的目录和文件名之间的分隔符是/
,因此我假设您使用的是Linux。这里有以下作品:
ARG0
,其中包含在命令行中指定的完整脚本名称。 system
调用,我们可以将此脚本名称发送回外壳,外壳具有一个dirname
命令,用于提取脚本名称的目录部分。 .
,它可以连接两个字符串。您说您有一个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"
之后,它将是查找文件的第一位。