在gnuplot中迭代二的幂

在gnuplot中迭代二的幂,gnuplot,Gnuplot,我想使用gnuplot绘制存储在一堆文件中的数据。如果文件是使用序列号命名的,(例如“1.dat”、“2.dat”…),我会使用类似 plot for [i=1:10] i.'.dat' u 1:2 w lp t 'I='.i; 但是,这些文件现在使用2的幂命名,即“2.dat”、“4.dat”、“8.dat”。。。。我试过了 plot for [i=1:10] (2**i).'.dat' u 1:2 w lp t 'I='.(2**i); 但是我得到了错误 STRING operator

我想使用gnuplot绘制存储在一堆文件中的数据。如果文件是使用序列号命名的,(例如“1.dat”、“2.dat”…),我会使用类似

plot for [i=1:10] i.'.dat' u 1:2 w lp t 'I='.i;
但是,这些文件现在使用2的幂命名,即“2.dat”、“4.dat”、“8.dat”。。。。我试过了

plot for [i=1:10] (2**i).'.dat' u 1:2 w lp t 'I='.(2**i);
但是我得到了错误

STRING operator applied to non-STRING type
我认为这是因为gnuplot将
(2**I)
视为浮点数而不是整数


我确信有一种方法可以完成我想做的事情,但由于我对使用gnuplot的控制语句非常陌生,所以我无法找到方法。有人能帮我吗?

您可以使用
sprintf
将数字转换为字符串:

plot for [i=1:10] sprintf('%d',2**i).'.dat' u 1:2 w lp t 'I='.(2**i)

有趣的是,将
(2**i)
与标题中的
'i='
连接不会产生问题。

尝试使用空字符串(
)开始字符串连接操作。也就是说,
”(2**i)。“.dat”
而不是
(2**i)。“.dat”

整数在由字符串串联
运算符操作时被提升为字符串,这就是
'i=”(2**i)
部分工作的原因。但在整数上没有这样的运算符。如果你打算使用
sprintf
你也可以使用
sprintf('%d.dat',2**i)
来保存一个步骤。首先我想,这个步骤不需要这种构造。我也更喜欢使用
sprintf
。但现在我发现了一种情况,使用您的解决方案是唯一的方法(请参阅)。使用为[y=2000:2014]xtics add(sprintf(“%d/01/01',y)sprintf(“%d-01-01 00:00',y”)设置的
不起作用,而对第二个字符串使用
'.y.-01-01 00:00'
则起作用!因此,这里似乎只有当时间字符串是真实字符串,而不是函数调用的结果时,才会解析时间字符串+1:)可能是虫子吧?@Christoph哼,不知道。。。我一直在尝试不同的选择,你放在这里的例子,但没有用。。。