在 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
.
考虑以下示例输入文件:
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
.