stats命令给出的数据块数量错误

时间:2014-05-30 15:03:33

标签: gnuplot

我在Gnuplot版本4.6补丁级别5中使用以下Gnuplot脚本:

##### Prologue #####
clear # erases the current screen or output device 
reset # all graph-related options take on their default values

###### Plot options #####
set style data lines
set surface
set dgrid3d 64,64 qnorm 2
set hidden3d
set ticslevel 0.8
set isosample 40,40

set view 60, 30, 1, 1
set contour base

######  Plot data   #####
stats 'modele.out'
do for [i=0:int(STATS_blocks-1)] {
    set key title 'density at t'.i
    splot 'modele.out' every :::i::i using 2:3:5 notitle
    pause 0.5
}

和以下文件:

# Time is  0.000000000000000E+000
0.0000    0.0000    0.0000    0.9787    0.0213
0.0000    0.0000    0.3333    0.9077    0.0923
0.0000    0.0000    0.6667    0.9738    0.0262
0.0000    0.0000    1.0000    0.9673    0.0327
0.0000    0.3333    0.0000    0.9044    0.0956
0.0000    0.3333    0.3333    0.9246    0.0754
0.0000    0.3333    0.6667    0.9181    0.0819
0.0000    0.3333    1.0000    0.9089    0.0911
0.0000    0.6667    0.0000    0.9348    0.0652
0.0000    0.6667    0.3333    0.9372    0.0628
0.0000    0.6667    0.6667    0.9933    0.0067
0.0000    0.6667    1.0000    0.9273    0.0727
0.0000    1.0000    0.0000    0.9909    0.0091
0.0000    1.0000    0.3333    0.9771    0.0229
0.0000    1.0000    0.6667    0.9014    0.0986
0.0000    1.0000    1.0000    0.9312    0.0688

# Time is   50.0000000000000     
50.0000    0.0000    0.0000    0.1036    0.8370
50.0000    0.0000    0.3333    0.1036    0.9093
50.0000    0.0000    0.6667    0.1031    0.9368
50.0000    0.0000    1.0000    0.1042    0.8378
50.0000    0.3333    0.0000    0.1034    0.9556
50.0000    0.3333    0.3333    0.1039    0.9127
50.0000    0.3333    0.6667    0.1041    0.9761
50.0000    0.3333    1.0000    0.1041    0.9587
50.0000    0.6667    0.0000    0.1033    0.9432
50.0000    0.6667    0.3333    0.1043    0.9503
50.0000    0.6667    0.6667    0.1087    0.5931
50.0000    0.6667    1.0000    0.1057    0.9579
50.0000    1.0000    0.0000    0.1044    0.8390
50.0000    1.0000    0.3333    0.1046    0.9101
50.0000    1.0000    0.6667    0.1062    0.9597
50.0000    1.0000    1.0000    0.1063    0.8494

# Time is   100.000000000000     
100.0000    0.0000    0.0000    0.0997    0.8433
100.0000    0.0000    0.3333    0.0998    0.9123
100.0000    0.0000    0.6667    0.0995    0.9501
100.0000    0.0000    1.0000    0.0999    0.8442
100.0000    0.3333    0.0000    0.0999    0.9593
100.0000    0.3333    0.3333    0.1000    0.9157
100.0000    0.3333    0.6667    0.1000    0.9794
100.0000    0.3333    1.0000    0.1002    0.9612
100.0000    0.6667    0.0000    0.0997    0.9534
100.0000    0.6667    0.3333    0.1000    0.9542
100.0000    0.6667    0.6667    0.1001    0.6028
100.0000    0.6667    1.0000    0.1004    0.9584
100.0000    1.0000    0.0000    0.1000    0.8448
100.0000    1.0000    0.3333    0.1002    0.9143
100.0000    1.0000    0.6667    0.1005    0.9571
100.0000    1.0000    1.0000    0.1006    0.8490

我不明白为什么stats命令返回我只有1个数据块。在我看来,这应该是3。文件格式错误了吗?

1 个答案:

答案 0 :(得分:2)

stats为您提供数据文件中可索引块的数量。这些块由的空白记录分隔(即两个空白行)。

如果您plot 'modele.out' index 0,您会发现它也会绘制所有数据点,而index 1会给您一个错误。您的数据中只有一个(可索引)块。

解决方案

  • 将您的区块分隔两个空行
  • 将您的splot命令更改为splot 'modele.out' index i using 2:3:5 notitle

当您使用splot时,一行空行会分隔每一行(或数据块,以使用手册中的术语)。这与块不是一回事!在所有其他上下文中(据我所知),每个块之间有两行(或可索引块以使用手册中的术语)。


更新

正如Christoph在评论中所建议的那样,如果你想保持文件的格式相同,并确保最后没有空白行,你可以将循环更改为:

do for [i=0:STATS_blank] {

并使用原始splot行(every代替index)。