我是gnuplot的新手,在谷歌搜索后找不到合适的解决方案。
我有一个类似这样的数据矩阵:
A B C D E
A 0 2 3 4 5
B 6 0 8 9 0
C 1 2 0 4 5
D 6 7 8 0 0
E 1 2 3 4 0
我想要做的是用plot 'result.csv' matrix with image
绘制热图,x轴标记为A-E,y轴标记为A-E。此矩阵并不总是具有相同的大小,但行的数量始终等于cols的数量,并且始终标记为。
有人可以帮我解决这个问题吗?我想我必须使用using
命令,但到目前为止,这对我来说似乎是完全的伏都教......
非常感谢!
答案 0 :(得分:11)
这个实际上是一个doosie,如果没有一些* nix shell魔法我就无法实现。
首先,我们想要获得x tic标签和y tic标签:
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 )
我们使用了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,希望这是好的。
答案 1 :(得分:3)
plot 'result.csv' matrix rowheaders columnheaders with image
获得