Gnuplot 用不同的时间格式打印两个文件

Gnuplot 用不同的时间格式打印两个文件,gnuplot,Gnuplot,我从一个站点(时间戳%Y-%m-%d%H:%m)获取了数据,我想将其与一个引用文件(时间戳:%H:%m)进行比较 来自气象站的数据文件每分钟有1个条目 参考文件每15分钟有一个条目 我试图将两个文件绘制在同一个轴上,但由于某些原因,它不起作用。 在打印参考文件时,我还尝试了(timecolumn(1,“%H:%M”)命令 set xdata time set timefmt "%Y-%m-%d %H:%M" set format x "%H:%M" `Set title '24.12.2014'

我从一个站点(时间戳%Y-%m-%d%H:%m)获取了数据,我想将其与一个引用文件(时间戳:%H:%m)进行比较 来自气象站的数据文件每分钟有1个条目 参考文件每15分钟有一个条目

我试图将两个文件绘制在同一个轴上,但由于某些原因,它不起作用。 在打印参考文件时,我还尝试了(timecolumn(1,“%H:%M”)命令

set xdata time
set timefmt "%Y-%m-%d %H:%M"
set format x "%H:%M"
`Set title '24.12.2014'`
set origin 0,0.66
"data_20141224.csv" using 1:25 axes x1y2 linewidth 1 lc rgb 'orange' w l  title 'SolarRadiation',\
"refdat.txt" using (timecolumn(1, "%H:%M")):4 axes x1y2  linewidth 1 lc rgb 'yellow' w l title 'CI Reference'
2.绘图(CI参考)从不在绘图上显示

气象站输入文件:

2014-12-24 06:00    1.00    0.93    0.93    0.00    9   4.8 4.8 4.8 63
2014-12-24 06:01    1.00    0.93    0.93    0.00    9   4.8 4.8 4.7 63
2014-12-24 06:02    1.00    0.93    0.93    0.00    9   4.7 4.7 4.7 63
参考输入文件:

08:22   56  32  161 54  282 85  29  349
08:37   75  42  228 68  358 112 40  460
08:52   94  51  295 81  425 131 46  539
谢谢你的帮助 这是我键入的内容:

clear
reset
set title "24.12.2014" font "verdana,08"
set xdata time
set timefmt "%Y-%m-%d %H:%M"
set format x "%H:%M" time
set xlabel "Time"
set ylabel "CloudinessIndex" 
set y2label "Irradiance"
set ytics (0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0)
set yrange [0:1]
set ytics nomirror
set y2range [0:1200]
set y2tics (0,100,200,300,400,500,600,700,800,900,1000,1100,1200)
set xrange ['06:00':'22:00']
set autoscale x
set nokey
set grid
#Plot:
plot s=0, "data_20141224.csv" using \
(s==0 ? (s=timecolumn(1,"%Y-%m-%d %H:%M"),0) : (timecolumn(1,"%Y-%m-%d %H:%M")-s)):25 axes x1y2 linewidth 1 lc rgb 'orange' w l title 'SolarRadiation',\
"refdata.txt" using (timecolumn(1,'%H:%M')):4 axes x1y2  linewidth 1 lc rgb 'yellow' w l title 'CI Reference',
它仍然只打印日志文件中的数据
:-(

要自动偏移第一个数据点的值,可以执行以下操作:

 plot s=0, datafile using \
    (t=$1, s==0 ? (s=t,t-s) : t-s) : 2
s=0
是一个赋值,gnuplot不绘制这些赋值。using语句由一个
三元运算符(a?b:c)和两个
序列求值
s(逗号)组成,只返回最后一个值

要抵消日期(因为您只需要白天),您必须使用
floor()
函数将s四舍五入到00:00。 设置正确的文件名和格式字符串变量,然后执行以下操作

 plot s=0, logfile using \
      (t=timecolumn(1,fstr1), s==0 ? (s=24*3600*floor(t/24/3600),t-s) : t-s) ,\
      reffile using (timecolumn(1,fstr2)):2

现在,您的绘图中应该有两个数据集。执行“设置格式x fstr时间”设置、装饰等,您就完成了。

如果您希望更简单:只需忽略日志文件中的日期部分:

set xdate time
set timefmt "%H:%M"
set format x "%H:%M" time
plot data using 2:3, ref using 1:2

如果您的时间格式说明符包含空格(例如%y-%m-%d%H:%m),gnuplot将对列重新编号,使日期仅为一列。否则,日志文件中的日期部分将被视为自己的列,包含未使用的字符串值。

您不能只处理引用文件(使用
sed
)要使时间戳相同吗?这是一个一个月的参考文件。因此,我希望使用一种简单的方法将测量日期与每个月的参考文件进行比较,而无需编辑参考文件。sed是否易于用于此问题?请使用输入样本更新问题。自1970年以来,gnuplot以秒为单位计算所有内容,您的我会说,参考文件在错误的十年内到达。好吗?这很有趣。有没有关于我如何解决这个问题的想法,而不必格式化参考文件的时间戳?多谢你花时间来帮助我。你能说得更具体一点吗,我查了十进制运算符,但我现在真的不知道如何使用plot命令。只有在打印引用数据文件(%H:%M)时才需要timecolumn,对吗?如果设置
扩展数据时间
,gnuplot会根据使用
设置时间格式设置的格式以秒为单位读取x。timecolumn()函数不使用
扩展数据时间
,因为它有自己的格式字符串(从gp5.0开始)。输出根据
设置格式x
等进行格式化。如果不使用
扩展数据时间
,则必须在格式字符串后添加关键字
时间
,以便gnuplot知道它是时间格式字符串,而不是常规格式字符串。thx我会尝试。我现在无法理解绘图命令的外观。好的thx。所以我会这样做使用timecolumn时,不需要扩展数据时间和设置格式x?因此,我的气象站的数据有%Y-%m-%d%H:%m,我直接将其添加到timecolumn命令中,而参考数据有%H:%m。时间精确到哪里?在格式字符串之后。抱歉,我似乎在任何地方都找不到任何timecolumn示例。是的,我没有找到它k、 有人能写完整的绘图命令吗?