热图与类别数据

时间:2014-05-06 20:02:01

标签: gnuplot heatmap

我正在尝试通过gnuplot绘制热图。问题是:如何使用gnuplot累积数据。 从一个数据集开始:

0 0 0
0 1 1
1 0 2
1 1 3

可以通过

轻松绘制
set view map
splot 'test.data' using 2:1:3 with image 

问题是:不仅有一个数据集,而且有很多。请参阅此示例数据:

0 0 0
0 1 1
1 0 2
1 1 3
0 0 3
0 1 2
1 0 1
1 1 20

它具有重复的x / y值。是否可以使用gnuplot来总结第三列(这里显示的“数据列”:

0 0 0       0 0 3       0 0 3
0 1 1       0 1 2       0 1 3
1 0 2   +   1 0 1   =   1 0 3
1 1 3       1 1 20      1 1 23

我的第一个想法是在every中使用plot 'test.data' using 2:1:3 every 4 with image。但这不起作用。有没有人知道如何做到这一点?

对于感兴趣的人:我想绘制我的fitbit数据的热图: https://gist.github.com/senfi/c0d13a2c91fae13bc5f5 此文件包含九个星期的计数步骤。第一列是星期几(星期日到星期六)。第二列代表从凌晨0:00开始的5分钟步骤。绘制一周的情况看起来不错,但绘制过去两年的总和/平均值可能看起来非常棒。当然,如果我们弄清楚如何绘制这个,我会发布一张图片。随意使用steps-data。

1 个答案:

答案 0 :(得分:3)

这看起来像awk给我的工作。 awk可以在gnuplot内调用,如下所示:

sp '<awk ''{a[$1,$2]+=$3}END{for(i in a){split(i,s,SUBSEP);print s[2],s[1],a[i]}}'' test.data' w image

awk脚本将第三列的值累积到数组a中。每个值的关键字是字符串[$1 SUBSEP $2](相当于[$1,$2])。 $N是列N的值。 SUBSEP是一个内置变量,我们不需要担心它的价值,我们稍后会再次参考。

当读取整个文件(END块)时,split用于通过分解数组键来恢复前两列。打印密钥的两个部分,然后是累计值。我也重新安排了awk中的列顺序(print s[2],s[1],a[i]),以便回到gnuplot,不再需要using 2:1:3