编程语言
首页 > 编程语言> > 使用matplotlib / basemap进行Python插值

使用matplotlib / basemap进行Python插值

作者:互联网

我对编程很新,而且很难理解插值.我发现尝试解释它的每一个源都非常神秘(特别是basemap / matplotlib的特定于包的站点).我使用matplotlib的底图进行映射,但是我的数据的性质是它有5度5度块(lat lon块).我想通过插值平滑地图.

所以首先是我的代码.

from netCDF4 import Dataset
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap, addcyclic

#load the netcdf file into a variable
mar120="C:/Users/WillEvo/Desktop/sec_giptie_cpl_mar_120.nc"

#grab the data into a new variable
fh=Dataset(mar120,mode="r")

#assign model variable contents to python variables
lons=fh.variables['lon'][:]
lats=fh.variables['lat'][:]
test=fh.variables['NE'][:]

#specifying which time and elevation to map
ionst=test[12,0]

#close the netCDF file
fh.close()

# get rid of white stripe on map
ionst, lons=addcyclic(ionst, lons)

#map settings
m=Basemap(llcrnrlon=-180, llcrnrlat=-87.5, urcrnrlon=180, urcrnrlat=87.5,rsphere=6467997, resolution='i', projection='cyl',area_thresh=10000, lat_0=0, lon_0=0)

#Creating 2d array of latitude and longitude
lon, lat=np.meshgrid(lons, lats)
xi, yi=m(lon, lat)

#setting plot type and which variable to plot
cs=m.pcolormesh(xi,yi,np.squeeze(ionst))

#drawing grid lines
m.drawparallels(np.arange(-90.,90.,30.),labels=[1,0,0,0],fontsize=10)
m.drawmeridians(np.arange(-180.,181.,30.), labels=[0,0,0,1],fontsize=10)

#drawing coast lines
m.drawcoastlines()

#color bar
cbar=m.colorbar(cs, location='bottom', pad="10%")
cbar.set_label("Elecron Density cm-3")

#showing the plot
plt.show()

那么现在,我如何轻松地插入我的数据以使其平滑?我试图调用Basemap.interp但是我得到一个错误,说底图没有属性interp.

我对用于插入数据的内容真的很公正,我真的需要有人向我解释这个我是愚蠢的.

另请注意,我正在学习绘制标签之类的细节,所以我现在还不太担心.下面是上面代码输出的示例映射.

解决方法:

为了解决问题,我会使用imshow而不是pcolormesh

例如 :

from pylab import *

data = random((3,3))
figure(1)
imshow(data, interpolation='none')

plt.show()

给出:

imshow(data, interpolation='bicubic')

给出:

帮助页面列出了所有可能的插值:http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.imshow

标签:python,matplotlib,interpolation,netcdf,matplotlib-basemap
来源: https://codeday.me/bug/20190609/1204579.html