用X作为日期范围绘图

时间:2014-12-04 00:34:29

标签: plot gnuplot

我的数据格式如下:

2014-11-17 19 18
2014-11-18 8 20
2014-11-19 23 16
2014-11-20 28 20

等等。

我的gnuplot脚本如下:

gnuplot -e "
    set output 'commits-per-day-with.png';
    set term png truecolor giant;
    set xdata time;
    set timefmt '%Y-%m-%d';
    set format x '%Y-%m-%d';
    set xrange ['$min_date':'$max_date'];
    set xtics 7;
    set grid y;
    set boxwidth 1.0 relative;
    set style fill transparent solid 0.5 noborder;
    plot '$tmp_file' using 0:2 with boxes title 'authored',
         '' using 0:3 with boxes title 'committed';
"

正如您所见,它已嵌入到shell脚本中。 $min_date$max_date变量的格式如下:2014-01-01,因此就像数据中的格式(实际上是从数据中检索到的)和指定的格式一样。

当然,

$tmp_file是包含数据的文件。

gnuplot告诉我:

line 0: all points y value undefined!

我的错误是什么?

1 个答案:

答案 0 :(得分:1)

问题是,如评论所示,第0列。

你告诉gnuplot在xaxis上绘制时间戳。在计算机上,时间戳由数字表示,通常计算自过去一点以来的秒数。在大多数情况下,这一点是1970-1-1 00:00:00,然而,在gnuplot中,它是2000-1-1。

第0列是一个特殊列,用于计算当前绘制的数据集的行数(即您的案例中的行号)。因此,数据的x值为1,2,3 ......

所以,你的x值是2000年的第一秒,但你在2014年指定了一个范围。难怪没有什么可以绘制的。

如上所述,情节using 1:和gnuplot会正确解析第一列的时间戳。