0

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

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

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

("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 绘制 -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
4

2 回答 2

2

我想到的最简单的解决方案是在绘图区域外绘制一条水平线(-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将非零,您可以检查并在屏幕上打印横幅。

于 2015-12-30T07:08:15.120 回答
0

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

我花了几个小时才弄清楚。:)

于 2021-08-12T10:30:35.947 回答