如何在python中绘制平滑线?

如何在python中绘制平滑线?,python,netcdf,matplotlib-basemap,smoothing,Python,Netcdf,Matplotlib Basemap,Smoothing,NCEP数据来源于此。 我想画一幅这样的图: 或者这个(这个加槽线): 我的数据与他们不同,所以内容也不同。 但是,方法应该是相同的 我不知道如何使这条线平滑。这是我的结果: 这是我的密码: import numpy as np import scipy import matplotlib.pyplot as plt from netCDF4 import Dataset from scipy.interpolate import Rbf from scipy.ndimage import

NCEP数据来源于此。 我想画一幅这样的图: 或者这个(这个加槽线):

我的数据与他们不同,所以内容也不同。 但是,方法应该是相同的

我不知道如何使这条线平滑。这是我的结果:

这是我的密码:

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()

查看matplotlib站点上的
contour()
函数示例

以下是它们如何为该对象生成x和y坐标:

您需要做的是提高您自己程序中
meshgrid()
函数中使用的
lons
lats
字段的分辨率


更高的分辨率->更平滑的线条

但是,如何获得相应的“hgt”?
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)
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)