Построить карту в цикле без построения предыдущих точек - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь построить точки, дрейфующие в море. Следующий код работает, но также отображает все точки предыдущих графиков:

Duration = 6 #hours

plt.figure(figsize=(20,10))#20,10
map = Basemap(width=300000,height=300000,projection='lcc',
        resolution='c',lat_0=51.25,lon_0=-4)#lat_0lon_0 is left under
map.drawmapboundary(fill_color='turquoise')
map.fillcontinents(color='white',lake_color='aqua')
map.drawcountries(linestyle='--')

x=[]
y=[]
for i in range (0,Duration):

    x,y = map(Xpos1[i],Ypos1[i])
    map.scatter(x, y, s=1, c='k', marker='o', label = 'Aurelia aurita', zorder=2)
    plt.savefig('GIF10P%d' %i)

Xpos1 и Ypos1 - список замаскированных массивов. Каждый массив в списках имеет длину 10, поэтому на каждой карте должно быть нанесено 10 точек:

 Xpos1=[[latitude0,lat1,lat2,lat3,..., lat9],
       [latitude0,lat1,lat2,lat3,..., lat9],...]

Это дает мне шесть цифр, я покажу вам первое и последнее: First map Last picture

Предполагается, что каждая картинка имеет 10 баллов, но последняя представляет собой комбинацию всех карт (т.е. 60 баллов). Как мне получить 6 карт, каждая из которых имеет только 10 очков?

Edit: Когда я использую ответ из matplotlib.pyplot не забудет предыдущие графики - как я могу очистить / обновить? Я получаю ошибку

ValueError: Can not reset the axes.  You are probably trying to re-use an artist in more than one Axes which is not supported 

Похожая ошибка появляется, когда я использую ответ от: Как "почистить планшет"? а именно,

plt.clf()
plt.cla()#after plt.show()

Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Вместо того, чтобы строить новые диаграммы рассеяния для каждого изображения, имеет смысл обновить данные диаграммы рассеяния. Преимущество состоит в том, что карту нужно создать только один раз, что экономит время.

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

Duration = 6 #hours
Xpos1 = np.random.normal(-4, 0.6, size=(Duration,10))
Ypos1 = np.random.normal(51.25, 0.6, size=(Duration,10))

plt.figure(figsize=(20,10))
m = Basemap(width=300000,height=300000,projection='lcc',
        resolution='c',lat_0=51.25,lon_0=-4)
m.drawmapboundary(fill_color='turquoise')
m.fillcontinents(color='white',lake_color='aqua')
m.drawcountries(linestyle='--')

scatter = m.scatter([], [], s=10, c='k', marker='o', label = 'Aurelia aurita', zorder=2)

for i in range (0,Duration):
    x,y = m(Xpos1[i],Ypos1[i])
    scatter.set_offsets(np.c_[x,y])
    plt.savefig('GIF10P%d' %i)

plt.show()
0 голосов
/ 30 апреля 2018

Как сказал @Primusa, простое перемещение всех вещей в цикл for работает для переопределения карты. Правильный код:

for i in range (0,Duration,int(24/FramesPerDay)):
    plt.figure(figsize=(20,10))#20,10
    map = Basemap(width=300000,height=300000,projection='lcc',
          resolution='c',lat_0=51.25,lon_0=-4)#lat_0lon_0 is left under

    map.drawmapboundary(fill_color='turquoise')

    map.fillcontinents(color='white',lake_color='aqua')
    map.drawcountries(linestyle='--')

    x,y = map(Xpos1[i],Ypos1[i])
    map.scatter(x, y, s=1, c='k', marker='o', label = 'Aurelia aurita', zorder=2)

    plt.savefig('GIF10P%d' %i)

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...