簡體   English   中英

底圖和Matplotlib - 提高速度

[英]Basemap and Matplotlib - Improving Speed

我正在使用MatplotlibBasemap創建一個用於經濟數據地理空間可視化的工具。

但是,現在,我想到的唯一方法是給我足夠的靈活性,每次我想要更改數據時都要創建一個新的底圖。

以下是我正在使用的代碼的相關部分:

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

如何更快地創建這些圖?

我無法想到每次運行代碼時都避免創建地圖的解決方案。 我嘗試在課堂外創建畫布/人物,但它沒有那么大的差別。 最慢的調用是創建底圖並加載形狀數據的調用。 其他一切都運行得很快。

此外,我嘗試保存底圖以供將來使用,但由於我需要新的軸,我無法讓它工作。 也許你可以指出我如何做到這一點的正確方向。

我想讓你知道我正在使用畫布作為PySide QWidget而我正根據數據繪制不同類型的地圖,這只是其中之一(另一個是歐洲的地圖,例如,或美國)。

你可以挑選和取消選擇底圖實例( 這里有一個在底圖源中執行此操作的示例 ),這可能會在創建繪圖時節省大量時間。

此外,可能值得看看shapefile讀取的時間長度(你也可能想要腌制)。

最后,我會認真考慮調查更新國家顏色數據的選項,而不是每次都制作一個新數字。

HTH,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM