这实际上是一个 doosie,如果没有一些 *nix shell 魔法,我无法实现它。
首先,我们要获取 x tic 标签和 y tic 标签:
XTICS="`awk 'BEGIN{getline}{printf "%s ",$1}' test.dat`"
YTICS="`head -1 test.dat`"
此时,XTICS 是字符串“FGHI J”,YTICS 是字符串“ABCD E”。
现在,我们要通过迭代设置 xtics:
set for [i=1:words(XTICS)] xtics ( word(XTICS,i) i-1 )
set for [i=1:words(YTICS)] ytics ( word(YTICS,i) i-1 )
我们使用了 2 个 gnuplot 内置函数(word
和words
)。 words(string)
计算给定字符串中有多少单词(单词是由空格分隔的字符序列)。 word(string,n)
返回字符串中的第 n 个单词。
现在,我们可以绘制您的数据文件...唯一的问题是matrix
想要使用您的数据文件中的所有行和列。您可能可以使用every
关键字减少实际读取的行/列,但我不知道如何在矩阵文件上执行此操作——而且我认为继续依赖 shell 实用程序(awk
和sed
)可能更容易
plot "<awk '{$1=\"\"}1' test.dat | sed '1 d'" matrix w image
#######^ replace the first field with nothing
################################## ^ delete first line
现在你的情节(希望)看起来像你想要的那样。
还要注意,由于我们使用了迭代,这个脚本只能在 gnuplot 4.3 或更高版本中工作——因为当前的稳定版是 4.6,希望没关系。