Grundkarte und Matplotlib - Geschwindigkeit verbessern

Ich erstelle ein Tool zur räumlichen Visualisierung von Wirtschaftsdaten mitMatplotlib undBasemap.

Die einzige Möglichkeit, die ich mir im Moment überlegt habe, besteht darin, jedes Mal, wenn ich die Daten ändern möchte, eine neue Grundkarte zu erstellen.

Hier sind die relevanten Teile des Codes, den ich verwende:

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

Wie kann ich diese Diagramme schneller erstellen?

Ich konnte mir keine Lösung vorstellen, um zu vermeiden, dass jedes Mal, wenn ich meinen Code ausführe, eine Karte erstellt wird. Ich habe versucht, die Leinwand / Figur außerhalb der Klasse zu erstellen, aber das machte keinen großen Unterschied. Der langsamste Aufruf ist derjenige, der die Grundkarte erstellt und die Formdaten lädt. Alles andere läuft ziemlich schnell.

Ich habe auch versucht, die Grundkarte für die zukünftige Verwendung zu speichern, aber da ich neue Achsen benötige, konnte ich sie nicht zum Laufen bringen. Vielleicht können Sie mich in die richtige Richtung weisen, wie das geht.

Ich möchte, dass Sie wissen, dass ich die Zeichenfläche als PySide QWidget verwende und abhängig von den Daten verschiedene Arten von Karten zeichne. Dies ist nur eine davon (eine andere wäre beispielsweise eine Europakarte) oder den USA).

Antworten auf die Frage(1)

Ihre Antwort auf die Frage