gnuplot:标记行和列名称的矩阵(热图)的x和y轴

时间:2012-05-29 08:56:26

标签: matrix label gnuplot

我是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命令,但到目前为止,这对我来说似乎是完全的伏都教......

非常感谢!

2 个答案:

答案 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内置函数(wordwords)。 words(string)计算给定字符串中有多少单词(单词是由空格分隔的字符序列)。 word(string,n)返回字符串中的第n个单词。

现在,我们可以绘制您的数据文件...唯一的问题是matrix想要使用数据文件中的所有行和列。您可以使用every关键字减少实际读取的行/列,但我不知道如何在矩阵文件上执行此操作 - 我认为继续依赖可能更容易shell实用程序(awksed

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)

好吧,这个问题已经过时了,但是gnuplot已经有了更简单的方法:

plot 'result.csv' matrix rowheaders columnheaders with image

http://gnuplot.sourceforge.net/demo/heatmaps.html

获得