我制作一个脚本来在窗口中绘制数据文件的所需列对。但我无法弄清楚如何使{gnuplot接受using
命令的参数。
我的代码看起来像这样
#!/bin/bash
filee=$1
shift 1
cols=$@
gnuplot -p << eof
#TESTS--------------------------------
print "gnuplot--starts----------------"
print "cols-var is: $cols"
print "filee-name is: $filee"
print "pair-vars are:"
do for [pair in "$cols"] {print pair}
print "-------------------------------"
#END TESTS----------------------------"
set term wxt 1 size 1500,900 title 'columns of $filee'
set key top left
set grid
set xrange [2:8]
set yrange [-0.02:0.02]
set format y "%g"
plot for [pair in "$cols"] '$filee' u pair
eof
如果不是pair
作为u
的参数,我使用1:3
或1:2
或者我得到正确数量的图,但当然它们都是相同的。我尝试了很多东西,除了u
不接受变量之外,一切似乎都在工作。运行它的输出是:
$ ./cploter written.dat 1:2 1:3 1:4
gnuplot--starts----------------
cols-var is: 1:2 1:3 1:4
filee-name is: written.dat
pair-vars are:
1:2
1:3
1:4
-------------------------------
line 0: warning: Skipping data file with no valid points
line 0: warning: Skipping data file with no valid points
line 0: warning: Skipping data file with no valid points
对此问题的一些帮助将不胜感激:)
编辑:因为u
似乎没有通过其参数接受循环,所以我选择了下面的代码。如果你知道一种不同的方法将所需的列对绘制成一个图,请发表评论或回答:)
#!/bin/bash
fil=$1; xx=$2; y1=$3; y2=$4
gnuplot -p <<- eof
set term wxt 1 size 1500,900 title 'columns of $filee'
set key top left
set format y "%g"
plot for [i=${y1}:${y2}] '$fil' u ${xx}:i w l t 'Column ${xx}:'.i
eof
我在gnuplot 4.6上。由于某些原因,使用for [i in $range]
在这种情况下不起作用。使用变量ys(i)=word("$yes",i), xs=word("$xes",i)
和plot for [i=1:3] '$fil' u xs(i):ys(i) w l
也不起作用。
答案 0 :(得分:1)
(部分答案;还有其他一些解决这种情况的方法)
运行脚本时出现了不同的错误(gnuplot 5.0)
line 0: warning: no column with header "1:2"
但我认为问题的根源是一样的。问题是gnuplot正在寻找名为“1:2”的单个列,而不是将令牌“1:2”解释为两列using
规范。
如果您只想绘制1:2
形式的对,您可以将第二列索引作为参数传递给脚本并使用plot命令
plot for [pair in "$cols"] '$filee' u 1:column(int(pair))
答案 1 :(得分:0)
使用[pair in "$cols"]
可以正常工作,前提是其他所有内容都正确无误。以下示例正常工作:
档案test.dat
1 2 3 4
5 6 7 8
9 10 11 12
和脚本plot.sh
:
#!/bin/bash
filee=$1
shift 1
cols=$@
gnuplot -p <<EOF
set terminal pngcairo
set output 'test.png'
plot for [col in "$cols"] '$filee' u 1:(column(int(col)))
EOF
使用
调用此脚本./plot.sh test.dat 2 3 4