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:
<code>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() </code>
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).