【问题标题】:Basemap and Matplotlib - Improving Speed底图和 Matplotlib - 提高速度
【发布时间】:2012-05-17 07:14:07
【问题描述】:

我正在使用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,并且我正在根据数据绘制不同类型的地图,这只是其中之一(另一个是欧洲地图,例如,或美国)。

【问题讨论】:

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

标签: python matplotlib matplotlib-basemap


【解决方案1】:

您可以腌制和取消腌制底图实例 (there is an example of doing this in the basemap source),这可能会为您节省大量创建绘图的时间。

此外,可能值得看看 shapefile 读取需要多长时间(您可能也想腌制它)。

最后,我会认真考虑研究更新数据国家颜色的选项,而不是每次都制作新的数字。

HTH,

【讨论】:

  • 我想知道您如何生成链接到的腌制地图文件。
  • 我知道这是很老的帖子,但忍不住问了这个问题。 Pelson,你如何腌制 shapefile 并在需要时重新加载它?在这方面我找不到任何例子。
  • pickle.load之后如何绘制地图?
猜你喜欢
  • 2017-07-12
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-11
相关资源
最近更新 更多