Basemap e Matplotlib - Melhorando a velocidade
Estou criando uma ferramenta para visualização geoespacial de dados econômicos usandoMatplotlib
eBasemap
.
No entanto, neste momento, a única maneira que pensei nisso me dá flexibilidade suficiente é criar um novo mapa base toda vez que eu quiser alterar os dados.
Aqui estão as partes relevantes do código que estou 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()
Como posso criar esses gráficos mais rapidamente?
Não consegui pensar em uma solução para evitar a criação de um mapa toda vez que executo meu código. Eu tentei criar a tela / figura fora da classe, mas isso não fez muita diferença. A chamada mais lenta é aquela que cria o mapa base e carrega os dados da forma. Tudo mais corre muito rápido.
Além disso, tentei salvar o Basemap para uso futuro, mas como preciso de novos eixos, não consegui fazê-lo funcionar. Talvez você possa me apontar na direção certa sobre como fazer isso.
Eu gostaria que você soubesse que eu estou usando a tela como um PySide QWidget e que estou planejando diferentes tipos de mapas dependendo dos dados, este é apenas um deles (outro seria um mapa da Europa, por exemplo ou os EUA).