2017-04-06 110 views
2

NCEP數據來自於此website。 我要繪製這樣一幅畫面: wind field and heights 或者這一個(這個加槽線): wind field and heights如何在python中繪製流暢的線條?

我的數據是與它們不同,所以內容是不同的。 但是,該方法應該是相同的。

我不知道如何平滑線條。這是我的結果: my_picture

這裏是我的代碼:

import numpy as np 
import scipy 
import matplotlib.pyplot as plt 
from netCDF4 import Dataset 
from scipy.interpolate import Rbf 
from scipy.ndimage import zoom 
from mpl_toolkits.basemap import Basemap 

m=Basemap(projection='cyl',llcrnrlat=20,urcrnrlat=50,llcrnrlon=90,urcrnrlon=130) 

CHNshp = 'D:\python\shapefile\data\CHN_adm_shp\CHN_adm1' 
m.readshapefile(CHNshp,'CHN',drawbounds = False) 
TWNshp = 'D:\python\shapefile\data\TWN_adm_shp\TWN_adm0' 
m.readshapefile(TWNshp,'TWN',drawbounds = False) 

for info, shape in zip(m.CHN_info, m.CHN): 
     x, y = zip(*shape) 
     m.plot(x, y, marker=None,color='k',linewidth = 0.5) 
for info, shape in zip(m.TWN_info, m.TWN): 
     x, y = zip(*shape) 
     m.plot(x, y, marker=None,color='k',linewidth = 0.5) 

parallels = np.arange(-90.,91.,10.) 
m.drawparallels(parallels,labels=[1,0,0,1],linewidth=0.5,xoffset=1.2) 
meridians = np.arange(-180.,181.,10.) 
m.drawmeridians(meridians,labels=[1,0,0,1],linewidth=0.5,yoffset=1.2) 

u=Dataset(r'D:\python\TRY\ncep\uwnd.2016.nc','r') 
v=Dataset(r'D:\python\TRY\ncep\vwnd.2016.nc','r') 
hgt_data=Dataset(r'D:\python\TRY\ncep\hgt.2016.nc','r') 

uwnd=u.variables['uwnd'][728][2][:] 
vwnd=v.variables['vwnd'][728][2][:] 
hgt=hgt_data.variables['hgt'][728][2][:] 
lat=u.variables['lat'][:] 
lon=u.variables['lon'][:] 

index1=np.logical_and(lon>=90,lon<=130);index2=np.logical_and(lat>=20,lat<=50) 
lons=lon[index1];lats=lat[index2] 
u1=uwnd[index2,:];u2=u1[:,index1] 
v1=vwnd[index2,:];v2=v1[:,index1] 
hgt1=hgt[index2,:];hgt2=hgt1[:,index1] 

nx,ny=np.meshgrid(lons,lats) 
x,y=m(nx,ny) 
Q = m.quiver(x,y,u2,v2,scale=250,width=0.003) 
qk = plt.quiverkey(Q, 0.85, -0.12, 20, '20 m/s', labelpos='N') 

rbf = scipy.interpolate.Rbf(x, y, hgt2) 
zi = rbf(x, y) 
plt.contour(x,y,zi,color='k') 

plt.show() 

更新:

lons = zoom(lons,3,order=3) 
lats = zoom(lats,3,order=3) 
x,y = np.meshgrid(lons,lats,copy=False) 
hgt2 = zoom(hgt2,3,order=3) 
cs = plt.contour(x,y,hgt2,levels=levels,colors='k',linewidths=0.7) 

回答

2

看一看有關matplotlib網站contour()功能的例子https://matplotlib.org/examples/pylab_examples/contour_demo.html

繼承人他們如何生成這個plot的x和y座標:

delta = 0.025 
x = np.arange(-3.0, 3.0, delta) 
y = np.arange(-2.0, 2.0, delta) 
X, Y = np.meshgrid(x, y) 

你需要做的是提高你的meshgrid()功能在自己的程序中使用您的lonslats領域的分辨率。

高分辨率 - >更流暢的線條

+0

但是,如何獲得相應的'hgt'? –

+0

'scipy.ndimage.zoom'的作品。 –