如果给定时间没有可用数据,Gnuplot 不会绘制数据

Gnuplot doesn't plot data if there is no data avaible for that given time

Gnuplot 从名为 file.dat 的巨大文件中读取天气数据,并绘制给定日期和时间的天气数据。

但是如果没有给定日期和时间(xrange)的数据,gnuplot 崩溃

如何告诉 gnuplot,如果 没有给定日期和时间的数据,在输出图像中显示 text

("There is no data available, I am sorry")

错误,如果没有可用数据:

line 0: all points y2 value undefined!

gnuplot加载的script.dem文件:

reset


#SET TERMINAL
set term svg
set output 'temp-verlauf.svg'
set title "Temperaturverlauf"

#Axes label
set xlabel "Messzeitpunkt"
set ylabel "Luftfeuchte/Temperatur"
set y2label "Luftdruck"

#Axis setup
set xdata time # x-Achse wird im Datums/Zeitformat skaliert
set timefmt "%d.%m.%Y\t%H:%M:%S" # Format Zeitangaben yyyy.mm.dd_hh:mm:ss
set format x "%H:%M" # Format für die Achsenbeschriftung


#Axis ranges
set yrange [0:60] # die y-Achse geht von:bis

#Tics
set ytics nomirror
set y2tics nomirror

#OTHER
set datafile separator "\t"
set xrange ["06.11.2014 14:00:00":"07.11.2014   21:00:00"]

plot \
"file.dat" every 10 using 1:5 title "Luftfeuchte" with lines, \
"file.dat" every 10 using 1:6 title "Temperatur" with lines, \
"file.dat" every 10 using 1:7 title "Luftdruck" with lines axes x1y2, \
"file.dat" every 10 using 1:17 title "Niederschlagsintensitaet Synop (4677)" with lines

编辑

感谢用户"bibi"。
如果 file.dat.

中没有可用数据,他有一个好主意让 gnuplot plot -1 获取数据

脚本将如下所示:

reset


#SET TERMINAL
set term svg
set output 'temp-verlauf.svg'
set title "Temperaturverlauf"

#Axes label
set xlabel "Messzeitpunkt"
set ylabel "Luftfeuchte/Temperatur"
set y2label "Luftdruck"

#Axis setup
set xdata time # x-Achse wird im Datums/Zeitformat skaliert
set timefmt "%d.%m.%Y\t%H:%M:%S" # Format Zeitangaben yyyy.mm.dd_hh:mm:ss
set format x "%H:%M" # Format für die Achsenbeschriftung


#Axis ranges
set yrange [0:60] # die y-Achse geht von:bis

#Tics
set ytics nomirror
set y2tics nomirror

#OTHER
set datafile separator "\t"
set xrange ["06.11.2014 14:00:00":"07.11.2014   21:00:00"]

plot \
-1 axes x1y2, \
-1 axes x1y1, \
"file.dat" every 10 using 1:5 title "Luftfeuchte" with lines, \
"file.dat" every 10 using 1:6 title "Temperatur" with lines, \
"file.dat" every 10 using 1:7 title "Luftdruck" with lines axes x1y2, \
"file.dat" every 10 using 1:17 title "Niederschlagsintensitaet Synop (4677)" with lines

我想到的最简单的解决方案是在绘图区域外画一条水平线(-1 可以,因为你有 set yrange [0:60]):

plot \
-1, \
"file.dat" every 10 using 1:5 title "Luftfeuchte" with lines, \
"file.dat" every 10 using 1:6 title "Temperatur" with lines, \
"file.dat" every 10 using 1:7 title "Luftdruck" with lines axes x1y2, \
"file.dat" every 10 using 1:17 title "Niederschlagsintensitaet Synop (4677)" with lines

此外,gnuplot 内部变量 GPVAL_ERRNO 将是 non-zero 如果发生奇怪的事情,您可以检查它并在屏幕上打印横幅。

您文件中的数据是双倍的。因此,在绘制一次后,它会跳回起点并在第一个图的顶部再次绘制所有内容。

我花了几个小时才弄明白。 :)