NetCDF: Как я могу писать сценарии на каждом временном шаге?

Я хотел бы создавать графические изображения из NetCDF на каждом временном шаге.

Мои файлы NetCDF выглядят так:

netcdf file:/C:/home/data/cmorph/test/reduced_cmorph_adjusted_spi_pearson_01.nc {
  dimensions:
    time = UNLIMITED;   // (240 currently)
    lat = 120;
    lon = 360;
  variables:
    float spi_pearson_01(time=240, lat=120, lon=360);
      :_FillValue = NaNf; // float
      :valid_min = -3.09; // double
      :valid_max = 3.09; // double
      :long_name = "Standard Precipitation Index (Pearson Type III distribution), 1-month scale";
      :_ChunkSizes = 1, 120, 360; // int

    int time(time=240);
      :units = "days since 1800-01-01 00:00:00";
      :_ChunkSizes = 1024; // int
      :_CoordinateAxisType = "Time";

    float lat(lat=120);
      :units = "degrees_north";
      :_CoordinateAxisType = "Lat";

    float lon(lon=360);
      :units = "degrees_east";
      :_CoordinateAxisType = "Lon";

  // global attributes:
  :title = "CMORPH Version 1.0BETA Version, daily precip from 00Z-24Z";
  :history = "Wed Feb 28 07:30:01 2018: C:\\home\\miniconda\\Library\\bin\\ncks.exe --dmn lon,0,,4 --dmn lat,0,,4 CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_1998_2017.nc cmorph_reduced_adjusted.nc";
  :NCO = "4.7.1";
  :_CoordSysBuilder = "ucar.nc2.dataset.conv.DefaultConvention";
}

Мне нравятся графики, созданные Panoply, но я не знаю, как их написать (я не хочу проходить через GUI для этого, так как у меня будет около 1500 графиков для создания). Я не предан Панопли как таковому, поэтому, если у кого-то есть идея получше, пожалуйста, сообщите. Я мог бы добиться этого в matplotlib, но это заняло бы у меня много времени и не выглядело бы так же хорошо, как сюжеты Panoply. Я стараюсь избегать многого, если это возможно, самостоятельно, но, возможно, есть что-то, что обеспечивает простое построение NetCDF, которое можно вызывать из скрипта (я обычно использую Python и bash), если да, пожалуйста, подскажите мне. Заранее спасибо за любые предложения или примеры.

2 ответа

Решение

Пример использования xarray:

import xarray as xr
import matplotlib
import matplotlib.pyplot as plt

matplotlib.use('Agg')
file_name = "reduced_cmorph_adjusted_spi_pearson_01.nc"
with xr.open_dataset(file_name) as ds:
    for t in range(ds.time.shape[0]):
        da = ds.spi_pearson_01.isel(time=t)
        plt.figure()
        da.plot()
        plt.savefig('frame{}.png'.format(t))

Не скриптовый метод, если вы не возражаете против использования нескольких нажатий в Panoply: создайте долгосрочную диаграмму и затем выберите File->Export Animation . Вы можете выводить отдельные временные шаги в формате JPG или PNG.

Я предполагаю, что вы не хотите вставлять 1500 рисунков в отчет или доклад, и поэтому цель этого состоит в том, чтобы просто исследовать файл по частям. Если это так, я бы просто открыл файл, используя

ncview file.nc 

Это позволяет пошагово перемещаться по слайсам, анимировать, перемещать курсор над слайсами, чтобы увидеть значения, и щелкнуть точку, чтобы увидеть серию времени. Если у вас его нет, вы можете легко установить его с помощью apt-get (ubuntu, mint и т. Д.) С

sudo apt-get install ncview
Другие вопросы по тегам