Python netcdf将数据绘制到网格上

时间:2016-09-07 16:35:35

标签: python matplotlib grid netcdf

我正在使用Lat,Lon数据,并希望在整个区域内均匀地对网格单元格中的所有sample_data(比如1km x 1km)进行平均,然后将其绘制为类似于此帖子,但是使用底图,我&# 39; ma有点卡在哪里开始: Heatmap with text in each cell with matplotlib's pyplot

下面的代码绘制了每个时间点的值,并且我希望在每个时间点对整个数据区域中定义的网格方格内的数据进行平均,并将平均值绘制到底图上,并使用网格设置时间间隔(即为一个游戏中时光倒流/电影制作一组图像)。

import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from netCDF4 import Dataset
import matplotlib.cm as cm

data = Dataset(netcdf_data,'r')

lat = data.variables['lat'][:]
lon = data.variables['lon'][:]
time = data.variables['time'][:]


fig = plt.figure(figsize=(1800,1200))
m = Basemap(projection='ortho',lon_0=5,lat_0=35,resolution='l')
m.drawcoastlines()


for value in range(0,len(sample_data)):
    m.plot(lat[:,value], lon[:,value], alpha=1, latlon=True)

plt.show()

2 个答案:

答案 0 :(得分:0)

嗯,你可以获得纬度和经度的最大值和最小值。

然后使用以下内容sample_data获取t的年龄:

data_within_box = sample_data[minLat:maxLat,minLon:maxLon,:,t]
avg_age = numpy.average(data_within_box) 

答案 1 :(得分:0)

这是一种粗暴的做法:

lat_1 = 58
lat_2 = 60
lon_1 = 2
lon_2 = 5
size = 0 
age2 = 0 

for parts in range(10):
    for length in range(len(lon)):
        if lon[length,parts] < lon_2:
            if lon[length,parts] > lon_1:
                if lat[length,parts] > lat_1:
                    if lat[length,parts] < lat_2:
                        age = (age[length, parts])
                        size = size + 1
                        age2 = age + age2
                        mean = age2/size