Datetime gnuplot:打印时时间数据(朱利安日期,x轴)不正确

Datetime gnuplot:打印时时间数据(朱利安日期,x轴)不正确,datetime,time,gnuplot,julian-date,Datetime,Time,Gnuplot,Julian Date,我试图使用gnuplot将数据绘制为时间的函数。我遇到时间数据(x轴)不正确的问题。这个问题与发布的问题类似,但该帖子似乎无法解决我的问题 首先,这里是显示错误的文件“data.txt”的子集 996,1.81014336621038094E+07,1.04721577434964254E+07 997,1.81073887058396861E+07,1.04688883975542113E+07 998,1.81123550412347727E+07,1.04660263576711770E+

我试图使用gnuplot将数据绘制为时间的函数。我遇到时间数据(x轴)不正确的问题。这个问题与发布的问题类似,但该帖子似乎无法解决我的问题

首先,这里是显示错误的文件“data.txt”的子集

996,1.81014336621038094E+07,1.04721577434964254E+07
997,1.81073887058396861E+07,1.04688883975542113E+07
998,1.81123550412347727E+07,1.04660263576711770E+07
999,1.81165058190760165E+07,1.04628236696091276E+07
1000,1.81200135215993598E+07,1.04593579882744774E+07
1001,1.81230027468293682E+07,1.04556943748914227E+07
1002,1.81256090021481551E+07,1.04518411259850748E+07
1003,1.81280483217409961E+07,1.04478383895292878E+07
1004,1.81311435732491128E+07,1.04439282290004119E+07
第一列对应于朱利安日期,第2列和第3列包含数据。为了绘制数据,我使用以下交互式gnuplot命令:

set datafile separator ","
set terminal png
set xdata time
set timefmt "%j"
set output "test_figure.png"
plot "data.txt" using 1:2 with lines lw 2 lt 1
这将生成以下绘图:

如果我将data.txt文件更改为(唯一的区别是前4行第一列中的前导零),我将得到正确的数字:

有没有一种方法可以让我编写的gnuplot代码不需要前导零?实际数据集的Julian日期为1到10000,如果我用前导零来填充5位数字(即00001),我会得到一个“非法的一年中的某一天”错误

我确实注意到两个图之间的x轴刻度标签不同(可能暗示了我所遇到的问题的根源),但我无法确定到底出了什么问题

注意:此“错误”仅在我从999转到1000时出现。从朱利安的第9次约会到第10次约会没有这个问题


提前感谢您的帮助

我不知道是什么导致了最初的问题,即在绘图时数据被重新排序,但我意识到我错误地解释了数据。第一列实际上不是朱利安日期,而是自开始日期起的小时数。因此,值25并不是数据中的25天,而是数据中的1天1小时

将第一列(计数器)替换为“日小时”:


然后使用
set timemt“%j-%H”
可以获得正确的绘图。

我不知道是什么导致了原始问题,在绘图时数据被重新排序,但我意识到我对数据的解释不正确。第一列实际上不是朱利安日期,而是自开始日期起的小时数。因此,值25并不是数据中的25天,而是数据中的1天1小时

将第一列(计数器)替换为“日小时”:


然后使用
set timemt“%j-%H”
可以获得正确的绘图。

首先让我们改进x轴标签,以了解发生了什么:

set format x "%Y-%m-%d"
然后,我们增加生成的png的分辨率,并使用linespoints而不是仅使用lines绘制。脚本现在看起来如下所示:

set datafile separator ","
set terminal png size 1200,600
set xdata time
set timefmt "%j"
set output "test_figure.png"
set format x "%Y-%m-%d"
plot "data.txt" using 1:2 with linespoints lw 2 lt 1
结果是:

1970年4月有几点,1972年9月有几点。时间格式修饰符
%j
表示一年中的某一天。1970年4月的点对应于第100天,1972年9月的点对应于大约997天,这两次都是从1970年1月1日(Unix纪元)算起的

这意味着,gnuplot解释值996。。。999天,从1970年1月1日算起。值为1000。。。1004被(错误地)解读为从1970年1月1日算起的100天,第四位数字被忽略(!)

如果在值996之前添加前导0。。。999,现在读作99,这让事情变得更糟


我在这里停止,因为您已经了解了如何读取数据:)

让我们首先改进x轴标签,以了解发生了什么:

set format x "%Y-%m-%d"
然后,我们增加生成的png的分辨率,并使用linespoints而不是仅使用lines绘制。脚本现在看起来如下所示:

set datafile separator ","
set terminal png size 1200,600
set xdata time
set timefmt "%j"
set output "test_figure.png"
set format x "%Y-%m-%d"
plot "data.txt" using 1:2 with linespoints lw 2 lt 1
结果是:

1970年4月有几点,1972年9月有几点。时间格式修饰符
%j
表示一年中的某一天。1970年4月的点对应于第100天,1972年9月的点对应于大约997天,这两次都是从1970年1月1日(Unix纪元)算起的

这意味着,gnuplot解释值996。。。999天,从1970年1月1日算起。值为1000。。。1004被(错误地)解读为从1970年1月1日算起的100天,第四位数字被忽略(!)

如果在值996之前添加前导0。。。999,现在读作99,这让事情变得更糟


我在这里停下来,因为您已经了解了如何读取数据:)

感谢您的调查。我对gnuplot还是个新手,所以这个回复非常有用。我仍然不知道为什么gnuplot错误地读取了1000-1004的值,但这对我来说已经不是问题了:)感谢您的调查。我对gnuplot还是个新手,所以这个回复非常有用。我仍然不知道为什么gnuplot错误地读取了1000-1004的值,但这对我来说已经不是问题了:)