绘制多变量时间数据

时间:2016-03-30 01:43:53

标签: gnuplot

我想要绘制一些相当简单的数据,理想情况下是直方图或折线图,但我无法弄清楚如何做。

以下是一些示例数据:

T Item Temp
1 Leaf 10
1 Car  12
2 Leaf 14
3 Car  23
4 Car  29 
4 Leaf 30

在此示例中,T是时间,Item是项目名称,Temp是此时的项目温度。

我尝试绘制图表时遇到了一些问题:

  • 项目被跟踪为行而不是列
  • 隐含零。

如果我的数据采用以下形式,那么我可以更容易地进行绘图,但不幸的是,它没有采用这种方式格式化:

T Car Leaf 
1 12  10
2 0   14
3 24  0
4 29  30

gnuplot是否能够绘制前一个示例,或者我是否必须编写预处理器以将提供的数据重新格式化为更简单的第二个数据?

1 个答案:

答案 0 :(得分:0)

我相信这可以完全在gnuplot中完成。这应该可以帮到你:

names=("Car Leaf")
plot for [name in names] 'test.txt' u 1:((stringcolumn(2)eq name?$3:0)) smooth freq with lp title name

输入help smoothhelp stringcolumn以获取更多信息

如果您想自动填充names变量,可以使用此system命令:

names=system("awk '{print $2}' test.txt | tail -n +2 | sort | uniq")

boxes这里有一个建议:

set boxwidth 0.5/(words(names))
plot for [i=0:words(names)] 'test.txt' u ($1-0.5-i/(words(names)+1.0)):((stringcolumn(2)eq word(names,i)?$3:0)) smooth freq with boxes title word(names,i)

这是你应该得到的:

enter image description here