Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 在gnuplot 4.6中循环几个语句的优雅方式?_Loops_Nested_Gnuplot - Fatal编程技术网

Loops 在gnuplot 4.6中循环几个语句的优雅方式?

Loops 在gnuplot 4.6中循环几个语句的优雅方式?,loops,nested,gnuplot,Loops,Nested,Gnuplot,我试图在函数图的几个对联上有一个plot语句循环。语句的顺序很重要,因为它以正确的顺序创建overdraw #!/usr/bin/gnuplot -persist datfile="overdraw.dat" num=3 skip=40 set table datfile g(x,t)=exp(-x**2+{0,1}*2*t*x) set samples 501 plot [-2:2][0:5] for [ii=0:num] real(g(x,ii)) unset table xspeed

我试图在函数图的几个对联上有一个plot语句循环。语句的顺序很重要,因为它以正确的顺序创建overdraw

#!/usr/bin/gnuplot -persist

datfile="overdraw.dat"
num=3
skip=40

set table datfile
g(x,t)=exp(-x**2+{0,1}*2*t*x)
set samples 501
plot [-2:2][0:5] for [ii=0:num] real(g(x,ii))
unset table

xspeed=0.1
yspeed=0.3

## this works but creates overdraw in the wrong order
#plot [-2:2] \
#  for [ii=0:num] datfile index ii u ($1+xspeed*ii):($2-yspeed*ii) not w l lt ii lw 8 \
#, for [ii=0:num] datfile index ii every skip u ($1+xspeed*ii):($2-yspeed*ii) not w p lt ii pt 7 ps 4 \
#

set macro

## this works but is cumbersome
plotstring="NaN not"
do for [ii=0:num] {
  plotstring=plotstring.sprintf(", \"%s\" index %i u ($1+xspeed*%i):($2-yspeed*%i) not w l lt %i lw 8", datfile, ii, ii, ii, ii)
  plotstring=plotstring.sprintf(", \"%s\" index %i every skip u ($1+xspeed*%i):($2-yspeed*%i) not w p lt %i pt 7 ps 4", datfile, ii, ii, ii, ii)
}
plot [-2:2] @plotstring


## this doesn't work because the for loop only applies to the first statement
#plotboth='datfile index ii u ($1+xspeed*ii):($2-yspeed*ii) not w l lt ii lw 8\
#, datfile index ii every skip u ($1+xspeed*ii):($2-yspeed*ii) not w p lt ii pt 7 ps 4'
#plot [-2:2] for [ii=0:num] @plotboth


## this gives an error message
plot [-2:2] for [ii=0:num] { \
  datfile index ii u ($1+xspeed*ii):($2-yspeed*ii) not w l lt ii lw 8\
, datfile index ii every skip u ($1+xspeed*ii):($2-yspeed*ii) not w p lt ii pt 7 ps 4 \
}
如您所见,我通过在包含plot语句的字符串中追加内容,使其以正确的顺序工作。但是,如果能够在plot语句周围加上括号就好了,如我的示例末尾所示


提交多个plot/replot语句似乎不是一个选项,因为这会在某些终端中创建页面(例如postscript)。我认为multiplot也很麻烦。也许我忽略了一种优雅的语法?

我建议使用一个命令来表示带点的直线,而不是使用两个命令,一个用于直线,另一个用于点,但是-因为有许多数据点-跳过绘图中的一些数据点(正如您使用
skip
变量所希望的那样)。
根据您的数据集,我使用以下代码生成绘图:

plot [-2:2] for [ii=0:num] datfile index ii u ($1+xspeed*ii):($2-yspeed*ii) \
  not w lp lt ii lw 8 pt 7 pi skip ps 4  

我使用
w lp
命令(它是带有linespoints的
的缩写)来获得一行点,并使用
pi skip
(它是
pointinterval skip
的缩写)来跳过符号之间的
40
数据点。有关
linespoints
pointinterval
的更多信息,请参见。

此问题是否仍然相关?你能提供一个你的输入的例子吗?(我可能会花更多的时间尝试生成一个,而不是给出一个答案)。@Schorsch,请取消我上面MWE中各种注释块的注释,以了解问题所在。My MWE生成的数据最多可使用
unset data
语句<代码>##这可以工作,但很麻烦
是产生我喜欢的输出的块,但我不喜欢编码<代码>##这给出了一条错误消息这是我想做的事情,因为它更系统。这可能只适用于gnuplot的未来版本,但我想问,现在是否有类似的方法(即显式控制循环中的透支顺序)。谢谢,我不知道linespoints的此选项!我一直在寻找一种控制绘图顺序的通用方法,以包括(例如)栅栏图,因此我现在保留“已接受”或“已接受”。但我投的是“有用”的票。@AnMarkm我几乎料到你想要的不仅仅是一条分数线。我感谢你的支持投票。