Gnuplot:从具有许多矩阵的文件中绘制特定矩阵

时间:2017-04-16 15:59:50

标签: gnuplot

我有一个文件,让我们说6 x 2,其中包含三个2 x 2矩阵的数据:

1 2
3 2
1 5
6 2 
8 5 
2 7

现在我希望能够绘制该文件的特定矩阵。像矩阵一样

1 5
6 2

对于我有一维数据的其他文件,如果我想从前十行绘制数据,我会使用::1::10

我怎么能为矩阵做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以“手动”选择感兴趣的块/矩阵,然后将此预处理的输入传递给Gnuplot以使其可视化。例如:

getMatrix(fName, i) = sprintf("<sed -n -e'%d,%dp' '%s'", 2*i-1, 2*i, fName)

plot getMatrix('test.dat', 2) matrix w image

在这里,Gnuplot“仅”看到sed命令的输出,该命令仅从文件test.dat过滤第3和第4行,即您在帖子中显示的矩阵。

编辑:

声明

getMatrix(fName, i) = sprintf("<sed -n -e'%d,%dp' '%s'", 2*i-1, 2*i, fName)

定义一个函数,对于给定的文件名和矩阵索引(假设为1),首先构造一个包含绘图命令的字符串,然后将其传递给plot。例如,对于i=1和文件test.dat,命令看起来像<sed -n -e'1,2p' 'test.dat'。如果指示Gnuplot绘制这样的“事物”,它会在前导<之后执行命令并绘制其输出(而不是整个文件test.dat)。在这种特殊情况下,sed仅提取从12(包括)的行号(从1开始)的行。

为了对一般大小N的矩阵进行扩展(假设正在处理的文件具有相应的列数),例如可以这样做:

unset key

getMatrix(fName, N, i) = sprintf("<sed -n -e'%d,%dp' '%s'", (i-1)*N + 1, i*N, fName)

do for [i=1:2] {
    plot getMatrix('test.dat', 10, i) matrix w image
    pause 5
}

这里唯一的变化是额外的参数N,表示各个矩阵的大小以及如何计算行的范围......