我有一个文件,让我们说6 x 2,其中包含三个2 x 2矩阵的数据:
1 2
3 2
1 5
6 2
8 5
2 7
现在我希望能够绘制该文件的特定矩阵。像矩阵一样
1 5
6 2
对于我有一维数据的其他文件,如果我想从前十行绘制数据,我会使用::1::10
。
我怎么能为矩阵做到这一点?
答案 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
仅提取从1
到2
(包括)的行号(从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
,表示各个矩阵的大小以及如何计算行的范围......