Gnuplot:如何绘制日期/时间图表

9

我希望绘制这种类型的数据:

  • X轴:日期
  • Y轴:时间长度

数据将看起来像这样:

22/02 51:10
25/02 63:10
01/03 50:55
23/03 52:10

我已经为X轴完成了这个操作:

set xdata time
set timefmt "%d/%m"

但我不知道如何管理Y轴。

2个回答

5

正如Tom所说,您只能使用一个timefmt。但是,如果可以将数据拆分为更多列,例如:

22/02 51 10
25/02 63 10
01/03 50 55
23/03 52 10

您可以通过直接计算来绘制时间长度,例如:
plot 'file' u 1:($2 + $3/60)

绘制分钟,或者像这样:

plot 'file' u 1:($2/60 + $3/3600)

绘制工时。


2
+1 做得好!此外,您还可以使用awk自动拆分gnuplot中的列:plot "<awk 'BEGIN{FS="[ :]"} {print $1, $2, $3} ' date_time.dat" u 1:($2/60 + $3/3600) - 为了完整性,将此附加到您的答案可能是值得的。 - Tom
这对于将时间分辨率提高到微秒级别非常有用。您是否知道是否有适合此的格式字符?还是说Timefmt文档中仅提供了这种有限的格式化语言? - Wolf
1
@Wolf 不需要这个,gnuplot 可以处理微秒(自4.6版以来?):数据 12:34:56.1234567 可以使用 set timefmt '%H:%M:%S' 读取。 - Christoph
@Christoph 是的 :) -- 在4.6文档中,我读到了***新的时间/日期处理*** Gnuplot现在可以精确到毫秒级别跟踪时间[...] - Wolf
1
@Wolf 是的,使用 set timefmt '%H:%M:%S' 我可以读取带有微秒精度的数据,例如 12:34:56.12345612.34:56.123457,这些数据被正确地绘制出来。在读取时间时,您无法指定精度,但我不知道为什么 gnuplot 文档提到了毫秒精度(在某个地方他们谈论了至少毫秒精度)。唯一可以显式给出时间精度的部分是输出,例如 set format x '%M:%.3S' - Christoph
显示剩余4条评论

3

来自?xdata

目前只有一种timefmt格式,这意味着所有时间/日期列必须符合此格式。

因此,您需要稍微修改数据以符合一个设置。

类似于:

00:00:22/02 51:10:22/02
00:00:25/02 63:10:22/02
00:00:01/03 50:55:22/02
00:00:23/03 52:10:22/02

请注意,您可以使用命令行工具在gnuplot中完成此操作,请参见这里
编辑文件后,您可以按以下方式读取它。
set xdata time
set ydata time
set timefmt "%M:%S:%d/%m"
set format x "%d/%m"
set format y "%M:%S"
plot "date_time.dat" u 1:2 w l

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接