Python Basemap和Matplotlib-提高速度
我正在使用Python Basemap和Matplotlib-提高速度,python,matplotlib,matplotlib-basemap,Python,Matplotlib,Matplotlib Basemap,我正在使用Matplotlib和Basemap创建一个用于经济数据地理空间可视化的工具 然而,现在,我想到的唯一给我足够灵活性的方法是每次我想要更改数据时创建一个新的底图 以下是我正在使用的代码的相关部分: class WorldMapCanvas(FigureCanvas): def __init__(self,data,country_data): self.text_objects = {} self.figure = Figure() self.canvas =
Matplotlib
和Basemap
创建一个用于经济数据地理空间可视化的工具
然而,现在,我想到的唯一给我足够灵活性的方法是每次我想要更改数据时创建一个新的底图
以下是我正在使用的代码的相关部分:
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,并且我正在根据数据绘制不同类型的地图,这只是其中的一种(另一种可能是欧洲地图,例如美国地图)。您可以pickle和unpickle Basemap实例(),这可能会节省大量的绘图创建时间 此外,可能值得一看shapefile读取所花费的时间(您可能也希望对此进行pickle) 最后,我会认真考虑对数据的国家颜色更新的选择,而不是每次都做一个新的图形。
HTH,您使用的matplotlib版本是什么?为了说明性能,我有一段代码,从v1.0的45分钟到v1.1的3分钟(如果我没记错的话,basemap的版本在这段时间内没有改变).我想知道你是如何生成链接到的pickle地图文件的。相关的一行是我知道这是一篇非常古老的帖子,但我忍不住要问这个问题。Pelson,你如何在需要时对shapefile进行酸洗并重新加载?在这方面我没有任何例子。如何在pickle.load之后绘制地图?