Вопрос по python – Базовая карта и Matplotlib - улучшение скорости

4

Я создаю инструмент для геопространственной визуализации экономических данных с использованиемMatplotlib а такжеBasemap.

Тем не менее, прямо сейчас, единственный способ, которым я думал об этом, дает мне достаточно гибкости - это создавать новую базовую карту каждый раз, когда я хочу изменить данные.

Вот соответствующие части кода, который я использую:

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

Как я могу создавать эти графики быстрее?

Я не мог придумать решение, позволяющее избежать создания карты каждый раз, когда я запускаю свой код. Я пытался создать холст / рисунок вне класса, но это не имело большого значения. Самый медленный вызов - тот, который создает Базовую карту и загружает данные формы. Все остальное работает довольно быстро.

Кроме того, я попытался сохранить базовую карту для будущего использования, но, поскольку мне нужны новые оси, я не смог заставить ее работать. Может быть, вы можете указать мне правильное направление, как это сделать.

Мне бы хотелось, чтобы вы знали, что я использую холст в качестве PySide QWidget и что я строю различные типы карт в зависимости от данных, это только одна из них (другой может быть, например, карта Европы). или США).

Какую версию matplotlib вы используете? Чтобы дать некоторое представление о производительности, у меня был один фрагмент кода, который изменился с 45 минут на v1.0 до примерно 3 минут на v1.1 (если я правильно помню, версия basemap между ними не изменилась). pelson

Ваш Ответ

1   ответ
4

есть пример сделать это в исходной карт) что может сэкономить вам немало времени на создание сюжета.

Кроме того, вероятно, стоит посмотреть, сколько времени занимает чтение шейп-файла (возможно, вы тоже захотите это сделать).

Наконец, я бы серьезно подумал о том, чтобы изучить возможность обновления цветов страны для данных, а не делать каждый раз новую цифру.

НТН,

Мне было интересно, как вы генерируете маринованные файлы карт, на которые вы ссылались. theJollySin
Соответствующая строка Github.com / Matplotlib / базовая карта / BLOB / Master / примеры / hires.py # L21 pelson
Я знаю, что это очень старый пост, но не удержался, чтобы спросить об этом. Пелсон, как ты собираешь шейп-файл и загружаешь его снова, когда это необходимо? Я не мог найти никакого примера в этом отношении. sundar_ima
Как построить карту послеpickle.load? panc

Похожие вопросы