Извлечение данных и преобразование файла NetCDF - PullRequest
0 голосов
/ 14 марта 2020

Привет, ребята. Я использую Ferret для просмотра некоторых данных, хранящихся в файлах NetCDF. Тем не менее, я могу нанести данные только по всем измеренным значениям: Феррет строит данные за период с 1998 по 2004 год. Поскольку я не мог сосредоточиться на одномодовом периоде; однако Феррет не позволил мне настроить диапазон оси, поэтому я хотел теперь попытаться извлечь точки данных в файл .txt или .dat, чтобы я мог использовать GNUPlot для их просмотра. Вот данные, хранящиеся в файле:

yes? show dat
'''currently SET data sets:
    1> ./CrawfordPoint_surface.nc  (default)
 name     title                             I         J         K         L
 T_2M     Air temperature at 2 m           ...       ...       ...       1:105193
 T_2M_O   Origin of air temperature data   ...       ...       ...       1:105193
 RH_2M    Relative humidity at 2 m         ...       ...       ...       1:105193
 RH_2M_O  Origin of relative humidity dat  ...       ...       ...       1:105193
 WS_10M   Wind speed at 10 m               ...       ...       ...       1:105193
 WS_10M_O Origin of wind speed data        ...       ...       ...       1:105193
 P        Snowfall rate                    ...       ...       ...       1:105193
 P_O      Origin of snowfall rate          ...       ...       ...       1:105193
 SRIN     Downward shortwave radiation     ...       ...       ...       1:105193
 SRIN_O   Origin of downward shortwave ra  ...       ...       ...       1:105193
 SROUT    Upward shortwave radiation       ...       ...       ...       1:105193
 SROUT_O  Origin of the upward shortwave   ...       ...       ...       1:105193
 LRIN     Downward longwave radiation      ...       ...       ...       1:105193
 LROUT    Upward longwave radiation        ...       ...       ...       1:105193
 SHF      Sensible heat flux               ...       ...       ...       1:105193
 LHF      Latent heat flux                 ...       ...       ...       1:105193
 G        Subsurface heat flux             ...       ...       ...       1:105193
 TS       Surface temperature              ...       ...       ...       1:105193
 MELT     Melt rate                        ...       ...       ...       1:105193

Я могу посмотреть индивидуально на наборы данных, попросив Ферре перечислить их:

yes? list TS
             VARIABLE : Surface temperature (K)
             FILENAME : CrawfordPoint_surface.nc
             SUBSET   : 105193 points (TIME)
 01-JUN-1998 00:00:00 /      1:  265.2
 01-JUN-1998 01:00:00 /      2:  264.4
 01-JUN-1998 01:59:59 /      3:  263.7
 01-JUN-1998 03:00:00 /      4:  263.1
...

Каждый из этих файлов имеет временные данные: через несколько лет я хотел бы иметь возможность смотреть (скажем: температура поверхности) в течение одного года, вместо того, чтобы просить Феррета построить его (yes? PLOT TS), который изобразит все это. Причина, по которой мне посоветовали попробовать использовать gnuplot. Однако он не может читать эти файлы напрямую (netCDF).

С уважением, пожалуйста, помогите.

1 Ответ

1 голос
/ 25 марта 2020

Если вы можете получить данные в таком формате в текстовом файле, то вы почти закончили. Хотя формат даты 01-JUN-1998 немного особенный. Но я предполагаю, что начиная с gnuplot 5.0.3 его можно читать как ввод. Проверьте help time_specifiers. Даже если у вас есть все годы в ваших данных, вы можете просто ограничить их 1998, только если вы соответственно установите xrange в gnuplot. Разделителем столбца по умолчанию является пробел, поэтому ваши значения данных находятся в столбце 5.

Данные: Data.dat

             VARIABLE : Surface temperature (K)
             FILENAME : CrawfordPoint_surface.nc
             SUBSET   : 105193 points (TIME)
 01-JUN-1998 00:00:00 /      1:  265.2
 01-JUN-1998 01:00:00 /      2:  264.4
 01-JUN-1998 01:59:59 /      3:  263.7
 01-JUN-1998 03:00:00 /      4:  263.1
 03-JUN-1998 00:00:00 /      4:  260.0

Код:

### print time data with abbreviated month
reset session

myTimeFmt = "%d-%b-%Y %H:%M:%S"
set format x "%d-%b" time

set xrange [strptime(myTimeFmt,"01-JUN-1998"):strptime(myTimeFmt,"03-JUN-1998")]
set style line 1 pt 7 lc rgb "red"

plot 'Data.dat' u (timecolumn(1,myTimeFmt)):5 w lp ls 1 ti "Surface temperature (K)"
### end of code

Результат:

enter image description here

...