在 gnuplot 中绘制多个 date/time 格式

Plotting multiple date/time formats in 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 显示所有这些列的单个图,我遇到的主要问题是 "set 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”,我希望原始日期保持原样或至少作为日期 :)

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

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.