这个问题确实有些棘手,我无法在没有一些*nix命令行技巧的情况下解决它。
首先,我们想要获取x轴刻度标签和y轴刻度标签:
XTICS="`awk 'BEGIN{getline}{printf "%s ",$1}' test.dat`"
YTICS="`head -1 test.dat`"
现在,XTICS是字符串"F G H I J",YTICS是字符串"A B C D 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 )
我们使用了两个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
现在你的绘图(希望如你所愿)看起来应该已经达到了预期效果。
此外,请注意,由于我们使用了迭代,因此此脚本仅适用于 gnuplot 4.3 或更高版本——由于当前稳定版是 4.6,希望这没问题。
matrix
数据文件,所以这是一个很好的机会让我学习有关 gnuplot 的新知识。 - mgilsoncut -d' ' -f1 test.dat |xargs
" ; 滥用xargs将列转换为行。 - Manwe