Блеющие береговые линии в фанканимации матплотлиб с картографической проекцией - PullRequest
0 голосов
/ 08 мая 2018

В следующем примере сетка рисуется поверх моих береговых линий. Я хотел бы, чтобы береговые линии были на вершине (и все еще использовали блиттинг). Единственный способ получить то, что я хочу, это нарисовать береговые линии внутри функции init, а затем снова нарисовать их в функции обновления. Поэтому я перерисовываю их для каждого кадра. Есть ли более элегантный способ сделать это?

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from cartopy import crs as ccrs

fig = plt.figure()
ax = fig.add_subplot(111, projection=ccrs.PlateCarree())
ax.set_extent([-2,12,-2,12])
ax.coastlines('50m')

mesh = ax.pcolormesh(np.random.randn(10,10))

def init():
    mesh.set_array([])
    return mesh,

def update(t):
    mesh.set_array(np.random.randn(9,9).ravel())
    return mesh,

anim = FuncAnimation(fig, update, 100, init_func=init, blit=True)
plt.show()

1 Ответ

0 голосов
/ 08 мая 2018

Хитрость заключалась в том, чтобы переключать видимость береговой линии.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from cartopy import crs as ccrs

fig = plt.figure()
ax = fig.add_subplot(111, projection=ccrs.PlateCarree())
ax.set_extent([-2,12,-2,12])
cl = ax.coastlines('50m')

mesh = ax.pcolormesh(np.random.randn(10,10))

def init():
    mesh.set_array([])
    cl.set_visible(False)
    return mesh, cl

def update(t):
    mesh.set_array(np.random.randn(9,9).ravel())
    cl.set_visible(True)
    return mesh, cl

anim = FuncAnimation(fig, update, 100, init_func=init, blit=True)
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...