首页 > 解决方案 > 将不同块中的数据相加

问题描述

这是交易 - 我有一个看起来像这样的文件:

n_blocks n_rows
title1
data1 data2 data3 data4 data5 data6 data7 data8 data9
data1 data2 data3 data4 data5 data6 data7 data8 data9
data1 data2 data3 data4 data5 data6 data7 data8 data9
.
.
.
title2
data1 data2 data3 data4 data5 data6 data7 data8 data9
data1 data2 data3 data4 data5 data6 data7 data8 data9
data1 data2 data3 data4 data5 data6 data7 data8 data9
.
.
.
END OF THE DATA

第一行包含两个数字 - 块数和每个块内的行数。在每个块之前是一行,表示块的标题,然后每个块由 n_rows 行组成,每行由 9 个数据点组成。然后文件以“END OF THE FILE”结束。

我想做的第一件事是为每个块绘制第 1 列和第 8 列,并带有适当的标题。我已经研究了如何使用 command 绘制特定数量的块的数据plot "data.txt" every :::::n_blocks using 1:8,但不知道如何从文本文件的第一行自动提取块数,也不知道如何从每个块之前提取标题。

我需要做的第二件事是将所有块的总和绘制在一起,因此对于第一列中的每个点,我绘制每个块中第 8 列中相应数据点的总和。例如,绘制的第一个数据点将是每个块的第一行的第 8 列中所有条目的总和,绘制的第二个数据点将是每个块的第二行的第 8 列中的条目的总和块等。

我所要求的有多少是可能的?如有必要,我可以看到有关重新格式化数据文件的信息,但我不想这样做,因为我没有编写生成它们的程序。

标签: gnuplot

解决方案


我假设您的“数据块”按照 gnuplot 的要求由两个空行分隔。在这种情况下,以下命令将一次提取并绘制一个块,使用块的初始行作为标题:

 plot for [i=0:*] 'blocks.dat' skip 1 index i using 1:5 title columnhead

对于这个特定的任务,最好使用“index”选择器而不是“every”选择器。没有简单的方法可以从第一行中提取信息。另一方面,您不需要该图的这些信息。上面显示的命令通过“skip 1”忽略它。

求和也可能是可能的,但我不理解您对要求和的术语或要产生的情节的描述,因此我无法提供示例。


推荐阅读