Улучшена скорость прорисовки нескольких фигур в matplotlib - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть код, который генерирует большое количество изображений png с помощью matplotlib pcolormesh.Изображения имеют высокое разрешение, поэтому для их построения требуется некоторое время.Я старался максимально сократить время прорисовки, не ставя под угрозу чистый внешний вид графики, но каждое изображение все равно занимает ~ 15-20 секунд для сохранения в файл.

Проблема в том, что этот код должен работать в рабочем режиме, когда изображения будут генерироваться каждые ~ 5 минут, когда скрипт запускается в crontab (по мере появления новых данных).Только для 1 переменной я генерирую изображения для 6 (или более разных регионов), циклически перебирая словарь, содержащий границы моих разных доменов карты:

# Using the 'Agg' backend because this will be run automatically 
# Not sure if there are any faster alternatives to Agg

import matplotlib
matplotlib.use('Agg')

# The map domains used:
domains = {'neweng': [40.7, 48, -80, -66], 'midatl': [35.5, 45, -87.5, -70]}

# Pull data from a file and do some calculations 

# Now we plot for each domain 
for region, constraint in domains.iteritems():
# region is name of domain, constraints are the values of lat/lon min and max

    mH = Basemap(projection='mill', llcrnrlon=constraint[2], \
        urcrnrlon=constraint[3], llcrnrlat=constraint[0], \
        urcrnrlat=constraint[1], resolution='h')

    # Simplified version of plotting
    plt.figure(figsize=[15,12])
    mH.pcolormesh(lons, lats, Twf, cmap=my_cmap, shading='gouraud')
    mH.drawcoastlines()
    mH.drawcountries()
    mH.drawstates()
    mH.drawcounties()

    # Do some other stuff

    plt.savefig('/home/kschneider/Documents/wetbulb/Images/' + region + fcst_hr_str, bbox_inches='tight')

Я читал об использовании подпроцессинга в Python для построения несколькихизображения одновременно, используя несколько ядер, но я не уверен, как применить это к моей ситуации.В этом случае я бы хотел построить несколько «доменов» одновременно.

Кроме того, я бы приветствовал любые другие предложения о том, как улучшить скорость.

Вывод кода: Пример вывода

...