在gnuplot中绘制多个日期/时间格式

时间:2016-01-13 15:21:27

标签: datetime time plot gnuplot

考虑以下示例输入文件:

yyyymmdd HHMM HHMM
20150501 0800 0140
20150502 0900 0021
20150503 1000 0021
20150504 0830 
20150505 0945
20150506 1145 0340

第一列是year/month/day,第二列是&第三是hours& minute

我需要使用gnuplot显示所有这些列的单个图,我遇到的主要问题是"设置timefmt"是独特的,而我需要支持两种不同的格式......任何建议?

我正在尝试在函数中使用strptime但是使用gnuplot语法有点丢失。

澄清这是我正在做的事情的一个例子:

reset

# Input:
# yyyymmdd HHMM HHMM
# 20150505 0800 0020

# Y  
set ydata    time
set format y "%H%M"
set timefmt  "%H%M"
set ylabel   "thisisy"

# 
gettime2(tcol) = strptime('%H%M',strcol(tcol))

set grid

plot '-' using 1:(gettime2(2)) with lines title 'A' #, '' using 0:3 title 'B'   with lines
20150501 0800 0140
20150502 0900 0021
20150503 1000 0021
20150504 0830 
20150505 0945
20150506 1145 0340

我在Y轴上看到的标签类似于' 2.01505x10e7',我希望原始日期或至少作为日期:)

1 个答案:

答案 0 :(得分:1)

这是另一个尝试:我所做的是在x轴上使用第一列作为日期,在y轴上使用第二列和第三列:

reset

set ydata    time
set format y "%H:%M"

set xdata time
set format x "%d.%m.%Y"
set xtics 86400

gettime(tcol) = strptime('%H%M', strcol(tcol))
getdate(dcol) = strptime('%Y%m%d', strcol(dcol))

set style data linespoints
plot '-' using (getdate(1)):(gettime(2)) title "A",\
     '' using (getdate(1)):(valid(3) ? gettime(3) : 1/0) title "B"
20150501 0800 0140
20150502 0900 0021
20150503 1000 0021
20150504 0830 
20150505 0945
20150506 1145 0340
e
20150501 0800 0140
20150502 0900 0021
20150503 1000 0021
20150504 0830 
20150505 0945
20150506 1145 0340
e

使用valid函数,可以检查给定列是否包含有效数字。如果第三列为空,那么为了防止strptime函数中的错误,这是必要的。

如您所见,无效条目会导致行被中断。如果您不想这样,则需要为这些条目提供默认值,然后使用这些条目而不是1/0

enter image description here