2015-10-21 4 views
0

Я пытаюсь построить базовую карту с моим графиком контура/колчана. Мой код ниже не дает ошибок, но изображение отображается неправильно; показаны только колчаны. Любая помощь?Базовая карта Overlay on Contour/Quiver Plot Python

import netCDF4 
import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 
import pylab 
from mpl_toolkits.basemap import Basemap 

ncfile = netCDF4.Dataset('30JUNE2012_0400UTC.cdf', 'r') 
dbZ = ncfile.variables['MAXDBZF'] 
u = ncfile.variables['UNEW'] 
v = ncfile.variables['VNEW'] 
print u 
print v 
print dbZ 

data = dbZ[0,0] 

data.shape 

print data.shape 


z_index = 0 # z-level you want to plot (0-19) 
U = u[0,z_index, :,:] #[time,z,x,y] 
V = v[0,z_index, :,:] 

map = Basemap(projection = 'merc',llcrnrlat=36,urcrnrlat=40,\ 
llcrnrlon=-80,urcrnrlon=-74,lat_ts=20,resolution='i') 
x = np.arange(0,150) 
y = np.arange(0,150) 

X,Y = np.meshgrid(x,y) 
lon, lat = map(X,Y, inverse = True) 

levels = np.arange(5,60,3) 
c = plt.contourf(lon,lat,data, levels, cmap='jet') 
plt.colorbar() 
plt.hold(True) 
q=plt.quiver(U,V,width=0.002, scale_units='xy',scale=10) 
qk= plt.quiverkey (q,0.95, 1.02, 20, '20m/s', labelpos='N') 
plt.xlim([0,120]) 

plt.ylim([0,120]) 


plt.xlabel('X') 
plt.ylabel('Y') 
plt.title('Reflectivity and Dual-Doppler Winds at 1 KM', fontsize=12) 
plt.show() 

Here is my data structure: 
<type 'netCDF4.Variable'> 
float32 UNEW(time, z, y, x) 
    missing_value: -32768.0 
unlimited dimensions: time 
current shape = (1, 20, 150, 150) 
filling off 

<type 'netCDF4.Variable'> 
float32 VNEW(time, z, y, x) 
    missing_value: -32768.0 
unlimited dimensions: time 
current shape = (1, 20, 150, 150) 
filling off 

<type 'netCDF4.Variable'> 
float32 MAXDBZF(time, z, y, x) 
    missing_value: -32768.0 
unlimited dimensions: time 
current shape = (1, 20, 150, 150) 
filling off 

Изображение выглядит следующим образом: enter image description here

+0

Вы есть некоторая путаница здесь с широта/долгота, используется диапазон 0-150 для представления у, который не имеет смысла в контексте широты от -90 до 90. Имеется ли в файле netCDF явное объявление lat/lon для размеров x и y? – daryl

+0

Да, он имеет только 1 пункт в файле. Lat = 38,97 и Lon = -77,47 @ daryl –

ответ

0

Вам нужно добавить долгота, широта в колчане также, в противном случае она будет построена в другом масштабе оси. Лат, который вы используете, не имеет смысла (как сказал @daryl в комментариях). на основе вашей проекции карты Я хотел бы предложить что-то вроде:

lonmin = -80 
lonmax = -74 
latmin = 36 
latmax = 40 

m = Basemap(projection = 'merc',llcrnrlat=latmin,urcrnrlat=latmax, llcrnrlon=lonmin,urcrnrlon=lonmax,lat_ts=20,resolution='i') 

#you should avoid using "map" since its a build-in function. 

x = np.arange(lonmin,lonmax,(lonmax-lonmin)/float(U.shape[2])) 
y = np.arange(latmin,latmax,(latmax-latmin)/float(U.shape[1])) 

X,Y = np.meshgrid(x,y) 
lon, lat = m(X,Y) 

затем:

c = plt.contourf(lon,lat,data, levels, cmap='jet') 
plt.colorbar(c) 

q=plt.quiver(lon,lat,U,V,width=0.002, scale_units='xy',scale=10) 
qk= plt.quiverkey (q,0.95, 1.02, 20, '20m/s', labelpos='N') 

plt.xlim([lon[0,0],lon[-1,-1]]) 
plt.ylim([lat[0,0],lat[-1,-1]]) 

plt.xlabel('X') 
plt.ylabel('Y') 
plt.title('Reflectivity and Dual-Doppler Winds at 1 KM', fontsize=12) 
plt.show() 
Смежные вопросы