我正在尝试通过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。
答案 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
。