我想在每个时间步骤从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个图表)。我并不喜欢Panoply本身,所以如果有人有更好的主意,请告知。我可以在matplotlib中解决这个问题,但这需要我一段时间,看起来不如Panoply情节好。我试图避免在我自己的阴谋中做很多事情,但也许有一些东西能够轻松绘制NetCDF,可以从脚本调用(我通常使用Python和bash),如果有的话请告诉我。提前感谢任何建议或示例。
答案 0 :(得分:3)
使用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中点击几下:创建一个lat / lon图,然后选择File-> Export Animation。您可以将各个时间步长输出为JPG或PNG。
答案 1 :(得分:3)
我有点假设您不想在报告或谈话中插入1500个数字,因此这样做的目的只是逐片调查文件。如果是这种情况,我只需使用
打开文件ncview file.nc
这允许您逐步切换切片,设置动画,将光标移到切片上以查看值,然后单击某个点以查看时间序列。如果你没有它,你可以使用apt-get(ubuntu,mint等)轻松安装
sudo apt-get install ncview