Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Time gnuplot-如何将读取时间格式转换为double/float/将其用作函数参数_Time_Type Conversion_Gnuplot - Fatal编程技术网

Time gnuplot-如何将读取时间格式转换为double/float/将其用作函数参数

Time gnuplot-如何将读取时间格式转换为double/float/将其用作函数参数,time,type-conversion,gnuplot,Time,Type Conversion,Gnuplot,我在gnuplot中读取时间值时遇到问题。我有一个数据文件 #data.dat 00:50.254 00:50.435 00:51.356 00:53.245 00:54.730 ... 格式为“%M:%S”。所以我用我的gnuplot文件来阅读它: set xdata time set timefmt "%M:%S" set xtics format "%M:%S" set grid set xrange [ 0:"01:30" ] set yrange [0:10] set xtics

我在gnuplot中读取时间值时遇到问题。我有一个数据文件

#data.dat
00:50.254
00:50.435
00:51.356
00:53.245
00:54.730
...
格式为“%M:%S”。所以我用我的gnuplot文件来阅读它:

set xdata time
set timefmt "%M:%S"
set xtics format "%M:%S"

set grid
set xrange [ 0:"01:30" ]
set yrange [0:10]
set xtics "00:00",10,"01:30"
set mxtics 2
set ytics 0,2,10
set mytics 2

p 'data.dat' u 1:1
在这里,我想以1:1的比例绘制数据,作为测试。结果是:我将只获取“%M”的值作为y值。这可以通过使用“设置ydata时间”进行更正。但是我想用时间数据做一些计算,需要秒或秒,包括分钟,比如%M*60+%S:01:30->90。我想把它传递给一个函数,或者在我的特殊情况下:在函数中进行一些计算后,用平滑频率求和:

bin(x) = floor(x+0.5)
p 'data.dat' u (bin($1)):(1.0) smooth freq w boxes
我如何在部分时间访问%S? 如何将读入时间转换为双精度/浮点

提前感谢您的帮助

编辑:发布后我马上有了一个想法:读入的数据是数组吗?我可以读出这个数组吗?我试试看

edit2:内部错误:非字符串参数。。。这不起作用 在我的特殊情况下,我可以使用:作为分隔符,只需将分钟和秒作为两个列读出。。。我也要试一试。但是,如果有更多的列需要绘制其他数据,这将不会有帮助

edit3:即使设置分隔符也不能解决问题,但会出现错误消息: 我的打印行中的字符格式错误。 这里是我的新gnuplot命令文件:

set datafile separator ':'

set timefmt "%M:%S"
set xtics format "%M:%S"

set grid
#set xrange [ 0:"01:30" ]
set xrange [0:90]
set yrange [0:92]
#set xtics "00:00",10,"01:30"
set xtics 0,10,90
set mxtics 2
set ytics 0,2,10
set mytics 2

p 'data.dat' #u 1:2 #($1*60+$2):($2)

在内部,gnuplot将时间存储为自某个历元以来的秒数。历元在版本之间有所不同,但在5.0行中是Unix历元

通常,使用时间格式设置,gnuplot自己处理转换。但是,也有一些功能可用于手动处理时间,例如

strptime("%M:%S","50.254")
将第一行的时间处理为秒数。我们甚至可以在打印命令时使用它,只要我们小心地将列读作字符串

plot "data.dat" u 0:(strptime("%M:%S",strcol(1)))
将数据文件绘制为经过的秒数与行号。由于您没有以时间格式指定日期信息,gnuplot默认为纪元中第一天的开始,因此我们只需要50秒,否则数字可能会大得多

通常,您可以处理这样的任何时间格式。如果您的时间格式中有空格或类似的空格,这可能会有点困难,因为如果不设置时间格式,您将无法依靠gnuplot的能力来知道要在列中分块多少,但这可以通过使用不同的分隔符或引用时间来处理


有关将时间格式转换为内部表示形式的函数,请参见帮助strtime;有关将其中一个内部表示形式转换回日期字符串的函数,请参见帮助strftime。

这正是我要找的,我很好奇为什么我自己没有找到它。非常感谢。要给出我的最终绘图:p'data.dat'u bin时间%M:%S,strcol1:1.0平滑频率w框现在可以按预期工作。