2012-05-08 41 views
4

我正在使用MatplotlibBasemap创建经济数据的地理空间可视化工具。底图和Matplotlib - 提高速度

不过,现在我想到的唯一办法就是给我足够的灵活性,每次我想改变数据时都要创建一个新的底图。

这里是代码的相关部分我使用:

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,并且我根据数据绘制了不同种类的地图,但这只是其中的一种(另一种会是欧洲或美国)。

+0

你使用的是什么版本的matplotlib?为了说明性能,我有一段代码从v1.0的45分钟到v1.1的大约3分钟(如果我没有记错的话,版本的底图在两者之间没有改变)。 – pelson

回答

4

您可以泡菜或取消挑选底图实例(there is an example of doing this in the basemap source),这可能会为您创建图表节省大量时间。

此外,它可能是值得一看的shapefile读取多久(你可能也想腌一下)。

最后,我会认真考虑调查更新国家颜色数据的选项,而不是每次都做一个新的数字。

HTH,

+0

我想知道如何生成链接到的腌渍地图文件。 – theJollySin

+1

相关行是https://github.com/matplotlib/basemap/blob/master/examples/hires.py#L21 – pelson

+0

我知道这是非常旧的帖子,但无法抗拒这个问题。皮尔森,你如何腌制shapefile并在需要时重新加载它?在这方面我无法找到任何例子。 –