Mapa de base y Matplotlib – Mejora de la velocidad

Estoy creando una herramienta para la visualización geoespacial de datos económicos utilizando Matplotlib y Basemap .

Sin embargo, en este momento, la única forma en que pensé que me da suficiente flexibilidad es crear un nuevo mapa base cada vez que quiera cambiar los datos.

Aquí están las partes relevantes del código que estoy usando:

 class WorldMapCanvas(FigureCanvas): def __init__(self,data,country_data): self.text_objects = {} self.figure = Figure() self.canvas = FigureCanvas(self.figure) self.axes = self.figure.add_subplot(111) self.data = data self.country_data = country_data #this draws the graph super(WorldMapCanvas, self).__init__(Figure()) self.map = Basemap(projection='robin',lon_0=0,resolution='c', ax=self.axes) self.country_info = self.map.readshapefile( 'shapefiles/world_country_admin_boundary_shapefile_with_fips_codes', 'world', drawbounds=True,linewidth=.3) self.map.drawmapboundary(fill_color = '#85A6D9') self.map.fillcontinents(color='white',lake_color='#85A6D9') self.map.drawcoastlines(color='#6D5F47', linewidth=.3) self.map.drawcountries(color='#6D5F47', linewidth=.3) self.countrynames = [] for shapedict in self.map.world_info: self.countrynames.append(shapedict['CNTRY_NAME']) min_key = min(data, key=data.get) max_key = max(data, key=data.get) minv = data[min_key] maxv = data[max_key] for key in self.data.keys(): self.ColorCountry(key,self.GetCountryColor(data[key],minv,maxv)) self.canvas.draw() 

¿Cómo puedo crear estas plots más rápido?

No puedo pensar en una solución para evitar crear un mapa cada vez que ejecuto mi código. Intenté crear el canvas / figura fuera de la clase, pero no hizo mucha diferencia. La llamada más lenta es la que crea el mapa base y carga los datos de forma. Todo lo demás corre bastante rápido.

Además, intenté guardar el mapa base para usarlo en el futuro, pero como necesito nuevos ejes, no pude hacerlo funcionar. Tal vez me pueda indicar la dirección correcta sobre cómo hacer esto.

Me gustaría que supiera que estoy usando el canvas como un QSidget de PySide y que estoy trazando diferentes tipos de mapas dependiendo de los datos, este es solo uno de ellos (otro sería un mapa de Europa, por ejemplo) , o los Estados Unidos).

Puede decellar y desmarcar instancias de mapa base ( hay un ejemplo de cómo hacerlo en la fuente del mapa base ) que puede ahorrarle una buena cantidad de tiempo en la creación de la ttwig.

Además, es probable que valga la pena ver cuánto tiempo está tomando la lectura del shapefile (es posible que también quiera decapitarlo).

Por último, consideraría seriamente investigar la opción de actualizar los colores de los países para los datos, en lugar de hacer una nueva cifra cada vez.

HTH,