Interpolación de Python con matplotlib / mapa base

Soy bastante nuevo en la progtwigción y me cuesta mucho entender la interpolación. Cada fuente que puedo encontrar que los bashs de explicar es extremadamente críptica (especialmente los sitios específicos del paquete para basemap / matplotlib). Estoy mapeando usando el mapa base de matplotlib, sin embargo, la naturaleza de mis datos es que viene en bloques de 5 grados por 5 grados (bloques lat lon). Quiero suavizar el mapa por interpolación.

Así que primero aquí está mi código.

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

Entonces, ¿cómo puedo interpolar fácilmente mis datos para suavizarlos? He intentado llamar a Basemap.interp sin embargo, aparece un error que dice que el mapa de base no tiene ningún atributo de interp.

Soy realmente imparcial con respecto a lo que uso para interpolar los datos, realmente necesito que alguien me explique esto como si fuera un tonto.

También tenga en cuenta que estoy en el proceso de aprender a trazar mapas, por lo que aún no estoy demasiado preocupado por detalles como las tags. A continuación se muestra un mapa de ejemplo que el código de arriba produce.

introduzca la descripción de la imagen aquí

Para suavizar las cosas usaría imshow en lugar de pcolormesh

Por ejemplo :

 from pylab import * data = random((3,3)) figure(1) imshow(data, interpolation='none') plt.show() 

da : introduzca la descripción de la imagen aquí

y

 imshow(data, interpolation='bicubic') 

da :

introduzca la descripción de la imagen aquí

La página de ayuda proporciona una lista de todas las interpolaciones posibles: http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.imshow

Esto contiene un código extra pero esto es lo que creo que terminé. Esto fue hace varios años, así que no estoy 100% seguro de que este sea el código exacto de arriba que resolvió mi respuesta.

 from netCDF4 import Dataset import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap, addcyclic import matplotlib.animation as animation plt.rcParams['animation.ffmpeg_path'] = 'C:/FFMPEG/bin/ffmpeg' file_loc = "C:/Users/Will Evonosky/Dropbox/SOARS/SOARS 2015/Data" #load the netcdf file into a variable mar120=file_loc+"/My Datasets To Share/SA120_Iono_Acc_WE.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'][:] var1=fh.variables['GT'][:] #specifying which time and elevation to map ionst=var1[0,18,:,:] details='(Z=6)' #close the netCDF file fh.close() # get rid of white stripe on map ionst, lons=addcyclic(ionst, lons) #Setting figure attributes fig=plt.figure(figsize=(15,15),frameon=False) #map settings m=Basemap(llcrnrlon=-180, llcrnrlat=-87.5, urcrnrlon=180, urcrnrlat=87.5,rsphere=6467997, resolution='l', 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) #plotting data onto basemap cs=m.imshow(ionst, interpolation=None, alpha=.8) vert=plt.axvline(x=-75, color='black', linewidth=5) #drawing grid lines m.drawparallels(np.arange(-90.,90.,30.),labels=[1,0,0,0],fontsize=15) m.drawmeridians(np.arange(-180.,181.,30.), labels=[0,0,0,1],fontsize=15) #drawing coast lines m.drawcoastlines() #color bar cbar=m.colorbar(cs, location='bottom', pad="10%") cbar.set_label(r"Ion Drag $(cm/s^2)$", size=15) #Title Preferences plt.title('Ion Drag at '+details, size=25) #Function to update the plots data def updateax1(j): cs.set_array(var1[j,18,:,:]) return cs, #Animate the plot ani1=animation.FuncAnimation(fig, updateax1, frames=range(24), interval=250, blit=True) ani1.save('Iondrag_Map.mp4') #showing the plot plt.show()