gnuplot v4.4:使用时间序列x轴绘制问题

时间:2010-11-12 11:17:34

标签: gnuplot

有人可以帮助我。我正在尝试创建一个简单的图表。

set datafile separator ","
set xdata time   
set timefmt "%d/%m/%Y %H:%M:%S" 
set format x "%H:%M" 
set autoscale y
plot ["13:00":"14:00"] './data.csv' using 1:2 with lines

data.csv:

26/10/2010 13:30:01,1

26/10/2010 13:30:12,2

26/10/2010 13:30:23,3

26/10/2010 13:30:34,4

给我错误:

line 6: all points y value undefined!

我已尝试过timefmt设置的所有方式!

非常感谢

2 个答案:

答案 0 :(得分:7)

问题在于定义xrange,它需要与timefmt格式相同(参见?time_axis)

以下为我工作

set datafile separator "," 
set xdata time
set timefmt "%d/%m/%Y %H:%M:%S" 
set format x "%H:%M" 
set autoscale y 
set xrange["26/10/2010 13:00:00":"26/10/2010 14:00:00"]
plot './data.csv' using 1:2 with lines

哦,我摆脱了每行数据之间的空白行。

如果您不想编辑文件以删除空白数据,那么您可以在gnuplot中使用awk,就像这样,

plot "<awk '$0!~/^$/ {print $0}' ./data.csv" using 1:2 with lines

用于最终命令。

编辑:如果仍有问题,请提供进一步的信息(参见评论)

我需要使用awk命令来绘制数据。这是为了删除数据中的空白行。以这种方式组合awk和gnuplot在linux系统上工作,我不确定windows上的gnuplot。可能是某些管道没有发生,在这种情况下,您必须在使用gnuplot之前删除空行。 (你仍然可以使用awk,但也许不在plot命令中?)

如果您使用的是Linux并且上述功能不起作用,那么问题就出现了。也许在gnuplot会话中存储了旧命令?为了确保我们完全做同样的事情,我给出了我使用的shell脚本(我改变了xrange以更好地适应数据并制作更好的情节,也注明了\ $而不是$,否则shell误解了$符号)。

好的:我在新文件夹中创建了文件data.csv.sh(如果你已经有data.csv或data.csv.png文件了):

#!/bin/bash

echo "26/10/2010 13:30:01,1

26/10/2010 13:30:12,2

26/10/2010 13:30:23,3

26/10/2010 13:30:34,4" > "data.csv"


gnuplot<<EOF
set term png small
set output "data.csv.png"
set datafile separator "," 
set xdata time
set timefmt "%d/%m/%Y %H:%M:%S" 
set format x "%H:%M" 
set autoscale y 
set xrange["26/10/2010 13:30:00":"26/10/2010 13:31:00"]
plot "<awk '\$0!~/^\$/ {print \$0}' ./data.csv" using 1:2 with lines
set output
set term pop
EOF 

然后在终端上输入:

chmod +wrx data.csv.sh && ./data.csv.sh

使shell脚本可执行,然后运行它。

文件data.csv.png类似于以下alt text

一切顺利

汤姆

答案 1 :(得分:1)

我只想添加上述讨论,以防有人遇到同样的问题。我试图绘制一个时间序列,例如:

07/22/13 01:00 120

当我尝试使用上述程序绘图时,我得到了错误的时间格式错误。我将输入数据更改为:

07/22/2013 01:00 120

改变后,它运行得很好。这是有道理的,因为gnuplot 07/22/13是模糊的。也就是说,它是1913年,1813年或2013年(或任何其他yy13)。