from scipy.stats.kde import gaussian_kde
import numpy
from scipy.io import netcdf
import gdal
from gdalconst import *
#import numpy,osr,sys
import netCDF4
import pdb
import datetime
from scipy import interpolate
import scipy.io as sio
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap ,shiftgrid
import numpy as np
import math
#import seawater as sw
from scipy import interpolate
from math import radians, cos, sin, asin, sqrt
import netCDF4
import glob
import os
import datetime
from matplotlib.path import Path
from collections import Counter
data=netCDF4.Dataset(os.path.join('E:\HYcom1\uv\uv1\hycom_glb_911_2016010100_t000_uv3z.nc'))
latitudes = data.variables['lat'][1188:1626]
longitudes = data.variables['lon'][750:2063]
lons, lats = np.meshgrid(longitudes,latitudes)
v=np.zeros([438,1313])#空的二维数组
u=np.zeros([438,1313])#空的二维数组
gird= [[0 for col in range(1313)] for row in range(438)]
k=0
tempv=data.variables['water_v'][0][k]
tempu=data.variables['water_u'][0][k]
#k=4
for i in range(1188,1626):
for j in range(750,2063):
if math.isnan(tempv[i][j]):
v[i-1188][j-750]=0
else:
v[i-1188][j-750]=tempv[i][j]
if math.isnan(tempu[i][j]):
u[i-1188][j-750]=0
else:
u[i-1188][j-750]=tempu[i][j]
#将为nan的数值赋值为0
for i in range(0,438):#当分辨率改变时需要改变
for j in range(0,1313):
gird[i][j]=math.sqrt(u[i][j]*u[i][j]+v[i][j]*v[i][j])
#格网数据标量化
for i in range (1,438,2):
for j in range (1,1313,2):
gird[i-1][j-1]=(gird[i-1][j-1]+gird[i-1][j]+gird[i][j-1]+gird[i][j])/4
for i in range (0,438):
for j in range (0,1313):
gird[i][j]=gird[int(i/2)*2][int(j/2)*2]
#双for循环,第一个将范围内的平均值存在左上角的位置,第二个将左上角的数据赋值所选范围内
gird= np.array(gird)
m = Basemap(llcrnrlon=60,urcrnrlon=165,llcrnrlat=15,urcrnrlat=50)
fig = plt.figure(edgecolor='none',frameon='false')#1124 figsize=(8,4),dpi=20
fig.set_size_inches(64,21.4)
x, y = m(lons, lats)
m.bluemarble()
m.pcolor(x,y,gird,cmap=plt.cm.RdBu_r)
m.fillcontinents(color='#CCCCCC',lake_color='#CCCCCC')#,alpha=0.0
plt.subplots_adjust(top=1,bottom=0,left=0,right=1,hspace=0,wspace=0)#输出图像边框设置
plt.savefig(os.path.join(r'E:\34\prectice\1202\'+'64214.png'))
plt.close()
以上是代码,其中读取NC数据,将特定区域的信息进行提取,进行绘图,但是最终需要的是陆地透明化的
而我出图只能出成这样的
不知在Python中是否有操作可以是陆地透明化,亦或者陆地填充成NASA的地图图片也可以,但是海洋地区一定是要根据处理出来的值来画的!求解~~~