Базовая карта Matplotlib: автономная карта

1

Привет, когда я использую базовую карту с максимальным разрешением (разрешение = 'f'), для ее построения требуется много времени.

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

Это происходит потому, что загружает карту из какого-то онлайн-хранилища?

Есть ли способ загрузить нужную мне карту и построить ее в автономном режиме?

Это MWE:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

lon_min = -10.5
lon_max = 2.0
lat_min = 50.0
lat_max = 59.7

coastlinesMap = Basemap(suppress_ticks=False, projection='cyl',
                        llcrnrlat=lat_min, urcrnrlat=lat_max,
                        llcrnrlon=lon_min, urcrnrlon=lon_max,
                        resolution='f')

n = 100
x = np.linspace(lon_min, lon_max, n)
y = np.linspace(lat_min, lat_max, n)
lon, lat = np.meshgrid(x, y)
z = np.zeros((n, n))
for i in range(n):
    for j in range(n):
        z[i, j] = x[i] + y[j]

fig = plt.figure("test")
ax = fig.add_subplot(111)
cf = ax.contourf(lon, lat, z, cmap="jet")
ax.set_xlabel("lon")
ax.set_ylabel("lat")
ax.add_collection(coastlinesMap.drawcoastlines(linewidth=0.25))
coastlinesMap.fillcontinents(color="green")
fig.colorbar(cf)

plt.show()

редактировать

Я просто хочу уточнить, что при отображении графика я могу масштабировать или панорамировать и т.д., И изменения бывают быстрыми, когда вы coastlineMap которая работает медленно.

  • 0
    «f» означает «отлично», это самое лучшее разрешение, которое вы можете получить, и рисование действительно занимает много времени. Смотрите также github.com/matplotlib/basemap/issues/252
  • 0
    @ImportanceOfBeingErnest спасибо за ответ! Я проверю эту ссылку.
Теги:
matplotlib
matplotlib-basemap

1 ответ

0
Лучший ответ

Следуя ссылке @ImportanceOfBeingErnest и оглядываясь, я решил проблему с помощью cPickle.

Я сообщаю о решении ниже

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import time
from six.moves import cPickle

lon_min = -10.5
lon_max = 2.0
lat_min = 50.0
lat_max = 59.7

t1 = time.clock()
coastlinesMap = Basemap(suppress_ticks=False, projection='cyl',
                        llcrnrlat=lat_min, urcrnrlat=lat_max,
                        llcrnrlon=lon_min, urcrnrlon=lon_max,
                        resolution='f')
print(time.clock()-t1,' secs to create original Basemap instance')
cPickle.dump(coastlinesMap, open('UKmap.pickle', 'wb'), -1)

n = 100
x = np.linspace(lon_min, lon_max, n)
y = np.linspace(lat_min, lat_max, n)
lon, lat = np.meshgrid(x, y)
z = np.zeros((n, n))
for i in range(n):
    for j in range(n):
        z[i, j] = x[i] + y[j]

fig = plt.figure("test")
ax = fig.add_subplot(111)
cf = ax.contourf(lon, lat, z, cmap="jet")
ax.set_xlabel("lon")
ax.set_ylabel("lat")
ax.add_collection(coastlinesMap.drawcoastlines(linewidth=0.25))
coastlinesMap.fillcontinents(color="green")
fig.colorbar(cf)

t1 = time.clock()
m2 = cPickle.load(open('UKmap.pickle','rb'))

fig = plt.figure("test")
ax = fig.add_subplot(111)
ax.set_xlabel("lon")
ax.set_ylabel("lat")
ax.add_collection(m2.drawcoastlines(linewidth=0.25))
m2.drawcountries()
print(time.clock()-t1,' secs to plot using using a pickled Basemap instance')

plt.show()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню