在 GNUPLOT 中用 date/time x 轴标记点

Labeling Points with a date/time x axis in GNUPLOT

我有一个简单的数据集,包含一个 date/time 字段 (YYYY-MM-DD HH:MM) 和一个温度字段,每隔 1 分钟获取一次。我正在尝试学习如何在地块上标记点,以便我可以标记最高和最低温度。

数据来自 node.js 应用程序中的 SQL 服务器,命令/数据通过 STDIN 传输到 gnuplot,输出为 PNG。我可以成功地绘制数据,但现在我只是想在图上标记最大和最小温度点,“坐标”来自 SQL 查询,这样最小或最大点看起来像( x,y) = (2021-02-11 18:34, 72.57)。我尝试在绘图上标记点的每个命令都无效。我发现的示例通常不涉及 date/time x 轴。

需要什么神奇的 ju-ju 才能获取任意数据点并在图上用 time/date x 轴标记它? FWIW,由于数据是从 SQL 服务器检索的,我可以以任何方式格式化数据,使其成为绘制数据所需的最简单方法,更重要的是,标记我想要的点。

提前感谢您的任何建议!!

贾斯汀

编辑(根据第一条评论):

以下是我使用的 gnuplot 命令:

set term png size 1280,600
unset output
set datafile separator ","
set xdata time
set timefmt "%Y-%m-%d %H:%M"
set format x "%H:%M"
set ylabel "Temperature ˚F
set xlabel "Time
set style line 100 lt 1 lc rgb "grey" lw 0.5
set grid ls 100
set xtics border
set xtics rotate
set key off
$mydata << EOD
// this is where my code "prints" the SQL data to STDIN of gnuplot
// data is formatted: 2021-02-11 22:48,74.42
EOD
plot $mydata using 1:2 with lines

请注意,我可以采用使 gnuplot 最容易处理的任何方式来格式化数据。我发现发送 YYYY-MM-DD HH:MM,TEMP 没有问题。

我正在尝试使用 'set label' 命令,使用 time/date 作为 x 值,温度作为 y 值:

set label 1 'Maximum' at 2021-02-11 19:10,72.50

不产生任何标签。

这是一个示例图,我想在其中标记最大点和最小点:

当x轴为时间时,单位为秒。您正在寻找在秒(浮点值)和格式化的 time/date 字符串之间进行转换的函数。

strptime("timeformat",s) 从字符串 s 中读取时间 时间格式说明符并将其转换为自 1970 年以来的秒数。

strftime("timeformat",t) 通过应用时间格式生成字符串 时间 t 的说明符 自 1970 年以来的秒数。

在您展示的情况下,这将对应于:

 myformat = "%Y-%m-%d %H:%M"
 set label 1 'Maximum' at strptime(myformat, "2021-02-11 19:10"), 72.50