在单行中绘制列的Gnuplot迭代不绘制每个点

时间:2019-04-30 07:53:46

标签: iteration row gnuplot

我有一个包含100行和大约400列的数据文件。我正在尝试像Selecting a single row from a data file in gnuplot那样遍历各列,以绘制每组2列的集合(单点的x和y位置):

table_file="/tmp/gnuplot_tab.dat"
set table table_file

line_number = 1
data_file = "data.dat"

plot for [i=2:*:2] "<(sed -n '".line_number."p' ".data_file.")" u i:i+1
unset table
plot table_file

这对于line_number = 1来说很好,但是对于line_number = 79来说,它并不会绘制所有列并表示

Ending * iteration at 0

为什么会发生这种情况,我该如何解决?最终目标是将line_number从1迭代到100,以绘制随时间变化的点,但现在甚至还没有绘制出所有特定的线。

如果您也能解释您的解决方案,我将不胜感激,这样我就可以更好地理解gnuplot。谢谢!

编辑:第一行实际上也不起作用!我知道当我有line_number=1时,只绘制了一半的点。那么问题来了,为什么这根本不绘制所有点!

1 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,则您的数据基本上如下所示:

r1 x(1,1) y(1,1) x(1,2) y(1,2) ... x(1,200) y(1,200)
r2 x(2,1) y(2,1) x(2,2) y(2,2) ... x(2,200) y(2,200)
r3 x(3,1) y(3,1) x(3,2) y(3,2) ... x(3,200) y(3,200)
...
r100 x(100,1) y(100,1) ...     ... x(100,200) y(100,200)

,现在您想绘制所有x/y对,例如像x(1,1)/y(1,1)。 我认为您不需要sed。您只能用gnuplot来做。下面是一个简化的示例(5行7列)。

代码:

### plot number pairs
reset session

$Data <<EOD
11 12 13 14 15 16 17
21 22 23 24 25 26 27
31 32 33 34 35 36 37
41 42 43 44 45 46 47
51 52 53 54 55 56 57
EOD
stats $Data
M = STATS_records  # number of datarows
N = STATS_columns  # number of columns (be aware, gnuplot only checks the first row)

plot for [j=0:M-1] for [i=2:N-1:2] $Data u i:i+1 every ::j::j with points pt 7 notitle
### end of code

结果:

enter image description here