在gnuplot中迭代二的幂
我想使用gnuplot绘制存储在一堆文件中的数据。如果文件是使用序列号命名的,(例如“1.dat”、“2.dat”…),我会使用类似在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
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哼,不知道。。。我一直在尝试不同的选择,你放在这里的例子,但没有用。。。