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设置的所有方式!
非常感谢
答案 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类似于以下
一切顺利
汤姆
答案 1 :(得分:1)
我只想添加上述讨论,以防有人遇到同样的问题。我试图绘制一个时间序列,例如:
07/22/13 01:00 120
当我尝试使用上述程序绘图时,我得到了错误的时间格式错误。我将输入数据更改为:
07/22/2013 01:00 120
改变后,它运行得很好。这是有道理的,因为gnuplot 07/22/13是模糊的。也就是说,它是1913年,1813年或2013年(或任何其他yy13)。