2014-12-04 61 views
-1

我的数据进行格式化,像这样:与X绘制作为时间范围

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

你的$ tmp_file有什么问题吗?在我的平台上(Ubuntu 12.04上的gnuplot版本4.6补丁级别6)看起来没问题,除了我使用默认的wxt终端并且没有设置xrange。它确实产生了一个图。顺便说一句,为什么你用'使用0:2'而不是'使用1:2'进行绘图呢? – DragonHu 2014-12-04 01:52:12

+0

我不是一个gnuplot专家,我和一个有gnuplot经验的朋友一起砍了这个,但是不知道如何正确地做到这一点...... – musicmatze 2014-12-04 15:28:44

+0

但是使用'1使用1 :2'像@DragonHu建议... – Christoph 2014-12-04 17:57:11

回答

1

的问题是,由评论的建议,列0

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

列0是一个特殊列,用于统计当前绘制的数据集(即您的案例中的行号)的行。所以,你的数据的x值是1,2,3,...

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

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

+0

如果我使用1:2而不是0:2,它会告诉我'line 0:无法绘制一个空的x范围! – musicmatze 2014-12-05 18:50:56

+0

然后你可能没有正确定义'$ min_date'和'$ max_date'。如果我第一个使用'1:2',第二个绘图使用'1:3',则省略set xtics 7(这也是错误的),并删除'set xrange ...'它工作正常。 – Christoph 2014-12-05 20:09:46