Я хочу обновить окно живой карты с информацией в реальном времени, используя бэкэнд Tkinter.График matplotlib Basemap содержит постоянные и временные объекты.
plt.pause () сохраняет окно рисунка и объекты открытыми при цикле.При построении следующих временных объектов они перекрывают старые.Отдельное удаление предыдущих временных функций не вариант.plt.clf () удаляет предыдущие временные элементы, но также и постоянные элементы на рисунке.Повторное создание постоянных объектов каждый раз занимает слишком много времени.
Чтобы повысить производительность, я хотел бы повторно использовать экземпляры базовой карты определенной точки кода (например, как обсуждалось здесь: https://github.com/matplotlib/basemap/issues/354). Однако удаление с помощью m = pickles.loads () не обновляет уже открытое окно, но каждый раз открывает новое окно. Что-то вроде plt.hold (True) не помогает.
Как назначитьБазовая карта не зарезервирована в уже открывшемся окне? Или есть другой способ обойти?
Вот упрощенная разбивка:
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import pickle
import datetime
def plot_on_map(i): #points, splines, circles ...
x,y =m(10*i,20)
current_position = m.plot(x, y, color='red', marker='o', markersize=5)
#set re-usable Basemap
fig = plt.figure()
fig.canvas.set_window_title('Title')
m = Basemap(projection='mill',lon_0=0)
m.drawcoastlines()
m.drawmapboundary()
x,y =m(0,0)
m.plot(x, y, color='blue', marker='o', markersize=5) #some permanent features of the map
m_pkl = pickle.dumps(m) #save object state before plotting temporary stuff on the map
i=0
while i<10: #re-use Basemap
m = pickle.loads(m_pkl) #unpickle pre-state
date = datetime.datetime.utcnow()
#temporary features of the map:
current_shade = m.nightshade(date)
plot_on_map(i)
plt.pause(0.05)
i=i+1
#plt.clf()#dismiss temporary features