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 として使用していることと、データに応じてさまざまな種類のマップをプロットしていることを知っておいてください。 、または米国)。