gnuplot - 读取双引号日期时间戳

gnuplot - Read Double Quoted datetime stamp

我正在尝试学习 gnuplot,我想绘制一些逗号分隔的数据。

"1/31/22, 4:36",0
"1/31/22, 16:30",1
"1/31/22, 16:39",2
"2/1/22, 16:44",3
"2/1/22, 9:25",4
"2/7/22, 13:59",5
"2/7/22, 8:57",6
"2/8/22, 11:03",7
"2/18/22, 15:50",8
"2/21/22, 11:11",9
"2/24/22, 9:11",10

如何读取这些数据并在 gnuplot 中绘图?
我尝试了以下但收到有关“警告:跳过没有有效点的数据文件”的错误

set xdata time
set timefmt "\"%m/%d/%Y, %H:%M\""
set format x “%d/%m/%Y”
set datafile separator ","
plot "file.txt" using 1:2 with linespoints

我假设我的 timefmt 不正确。正确的语法是什么?

gnuplot 还可以使用以下格式处理日期时间戳 AM/PM?

"1/31/22, 4:36 AM",0
"1/31/22, 4:30 PM",1

勾选help time_specifiers。你的年份是 2 位数 %y 而不是 4 位数 %Y。 双引号将使您的 date/time 成为第一列。格式中不需要额外的双引号。

使用 set xdata timeset timefmt "..." 语法,绘图命令中只有一种格式。 如果您使用语法 timecolumn()(检查 help timecolumn),您可以在绘图命令中使用不同的输入时间格式。

注:格式%p作为输入格式已经在gnuplot 5.4.0中引入 对于旧版本,您必须使用解决方法,请参见例如

代码:

### plot timedata in double quotes and AM/PM format
reset session

$Data1 <<EOD
"1/31/22, 4:36",0
"1/31/22, 16:30",1
"1/31/22, 16:39",2
"2/1/22, 16:44",3
"2/1/22, 9:25",4
"2/7/22, 13:59",5
"2/7/22, 8:57",6
"2/8/22, 11:03",7
"2/18/22, 15:50",8
"2/21/22, 11:11",9
"2/24/22, 9:11",10
EOD

$Data2 <<EOD
"1/31/22, 4:36 AM",0
"1/31/22, 4:30 PM",1
"1/31/22, 4:39 PM",2
"2/1/22,  4:44 PM",3
"2/1/22, 9:25 AM",4
"2/7/22, 1:59 PM",5
"2/7/22, 8:57 AM",6
"2/8/22, 11:03 AM",7
"2/18/22, 3:50 PM",8
"2/21/22, 11:11 AM",9
"2/24/22, 9:11 AM",10
EOD

set datafile separator comma

myTimeFmt1 = "%m/%d/%y, %H:%M"
myTimeFmt2 = "%m/%d/%y, %H:%M %p"
set format x "%d/%m/%Y" time

plot $Data1 u (timecolumn(1,myTimeFmt1)):2 w lp pt 7 ps 2 lc "grey" lw 4 ti "Data1", \
     $Data2 u (timecolumn(1,myTimeFmt2)):2 w lp pt 7 ps 1 lc "red"  lw 1 ti "Data2"
### end of code

结果: