如何在gnuplot中设置时区?

问题描述 投票:0回答:5

我有一个简单的 gnuplot 命令文件:

 ....
set xdata time
set timefmt "%s"
set format x "%H:%M"
....

其中 x - 时间戳列。

结果 - UTC 格式的时间。我可以更改 x 轴的本地时区吗?

gnuplot
5个回答
7
投票

今天刚刚在文档中发现了这一点:

秒与秒之间的转换采用世界时(与秒相同) 作为格林威治标准时间)。没有更改时间的规定 区或夏令时。如果您的所有数据均指同一时区 (并且都是日光或标准)你不需要担心这些 事物。但如果绝对时间对您的应用至关重要,您将 需要自己转换成UT。

来自

help time/date


7
投票

我今天刚遇到这个。您不需要更改格式,只需更改数据即可。如果 data.txt 包含 UTC 时间戳,并且您想在 PDT 中显示它们(与 UTC 相差 -7 小时),只需使用:

plot 'data.txt' using ($1+(-7*3600)):2

这会从每个 x 值中减去 7 小时(以秒为单位)。


1
投票

此处发布的代码片段对我不起作用,但这似乎可以解决问题:

TZ=Europe/Amsterdam tzoff=$(printf "%(%z)T")
tzoff=${tzoff:0:1}$(( ( 10#${tzoff:1:2} * 3600 + 10#${tzoff:3:2}* 60 ) ))
echo $tzoff

1
投票

参加聚会有点晚了,我没有足够的声誉点来发表评论,但为了补充安东尼和赫尔曼克的答案,这就是我用他们的信息实现它的方式:

  • command.gnuplot
    中,假设第一个字段包含日期/时间,第二个字段包含 Y 轴的值:

plot "inputfile" using ($1 - offset):2

  • 从 (bash) 命令行调用 gnuplot 时:

gnuplot -e "offset=$(date +%s -d '1 Jan 1970')" command.gnuplot

偏移量通常可以正常工作,因为 gnuplot 在内部将日期/时间解释为从纪元开始的秒数。我不知道

"offset=$(date ...)"
形式是否是 bash 特定的东西,但你总是可以使用
"offset=`date ...`"
来代替。

编辑—— 我发现这在处理 DST/夏令时更改时效果不佳。我将偏移计算更改为这个,现在效果更好了:

  • command.gnuplot
    中,假设第一个字段包含日期/时间,第二个字段包含 Y 轴的值:

plot "inputfile" using ($1 + offset):2

  • 从 (bash) 命令行调用 gnuplot 时:

gnuplot -e "offset=$(echo "$(date +%z) * 36" | bc)" command.gnuplot

这是如何运作的?

date +%z
-0400
或类似形式提供时区偏移量,这意味着
Local_Time = UTC - 4 hours
。如果我们将其视为数字 (-400),则偏移量(以秒为单位)为 -400 / 100 * 3600 = -400 * 36。 请注意,这不适用于具有 30 分钟增量的时区(印度?),但我确信通过一些创建数学,您也可以涵盖这一点。


0
投票

莫因,

我以前遇到过与线程开启者类似的问题,并遇到了类似的语法

plot "wave/timeseries.csv" using ($1+(2*3600)):2 title "swh" with l lw 2

显示有效波高预报 (bsh.de)。 直到几天前我想从 bash 脚本进行绘图以自动上传 gnuplot 图表以便与朋友分享时,这一切都很好。

#!/bin bash
tz=`date +%j`
tz=`echo "0$tz / 100 * 3600" | bc`
xyz...
gnuplot --persist <<EOF
abc...
plot "wave/timeseries.csv" using ($1+$tz):2 title "swh" with l lw 2
EOF

问题是,bash 用不存在的(NULL)cli 参数替换了 $1(数据字段)。转义、括号……没有任何帮助。

我的解决方法现在是在脚本中编写绘图命令,并转义到 tmp 文件,例如

echo "plot \"wave/timeseries.csv\" using (\$1+$tz):2 title \"swh\" with l lw 2" > plotcmd.tmp

并从 gnuplot 部分中“加载plotcmd.tmp”。 这样就可以了

来自波罗的海的一切美好 克里斯

© www.soinside.com 2019 - 2024. All rights reserved.