Matplotlib 底图 Hexbin 动画:清除帧之间的 hexbins
Matplotlib Basemap Hexbin Animation: Clear hexbins between frames
我在底图图像上制作 hexbin 热图的动画,但无法弄清楚如何在开始下一帧之前删除之前的 hexes。我想用一些积累来制作动画,但在选定的时间间隔重置(我的数据有一个时间维度,我想显示给定年份的所有点,一天一天,然后擦除六边形并显示下一年)。我想我需要存储层,并使用它的 .remove() 方法,但我无法弄清楚。
def update_hex(i, prev_layer):
if i == (len(years) - 1):
ani.event_source.stop()
print("End animation: Update Hex")
x, y = [mm.xmin, mm.xmax], [mm.ymin, mm.ymax]
x1, y1 = mm(df["LONGITUDE"][df["YEAR"] == years[i]].values, df["LATITUDE"][df["YEAR"] == years[i]].values)
x += x1.tolist()
y += y1.tolist()
x = np.array(x)
y = np.array(y)
if prev_layer:
prev_layer.remove()
hexlayer = mm.hexbin(x, y, gridsize = 75, bins = 100, mincnt = 0, cmap = 'my_cmap', linewidth = 0)
prev_layer = None
ani = animation.FuncAnimation(fig, update_hex, interval = 10, frames = range(len(years)), fargs = (prev_layer, ))
plt.show()
在这种情况下,我会使用一个全局数组来存储hexbin()
返回的对象。在预定义的时间间隔内,我会删除这些对象,清空数组的内容,然后重复。
fig, ax = plt.subplots()
def animate(i):
x0,y0 = np.random.random(size=(2,))*4-2
x = np.random.normal(loc=x0, size=(1000,))
y = np.random.normal(loc=y0, size=(1000,))
if len(prevlayers)>=maxlayers:
for layer in prevlayers:
layer.remove()
prevlayers[:] = []
hexlayer = ax.hexbin(x,y, gridsize=10, alpha=0.5)
prevlayers.append(hexlayer)
return hexlayer,
maxlayers = 3
prevlayers = []
ani = matplotlib.animation.FuncAnimation(fig, animate, frames=12)
我在底图图像上制作 hexbin 热图的动画,但无法弄清楚如何在开始下一帧之前删除之前的 hexes。我想用一些积累来制作动画,但在选定的时间间隔重置(我的数据有一个时间维度,我想显示给定年份的所有点,一天一天,然后擦除六边形并显示下一年)。我想我需要存储层,并使用它的 .remove() 方法,但我无法弄清楚。
def update_hex(i, prev_layer):
if i == (len(years) - 1):
ani.event_source.stop()
print("End animation: Update Hex")
x, y = [mm.xmin, mm.xmax], [mm.ymin, mm.ymax]
x1, y1 = mm(df["LONGITUDE"][df["YEAR"] == years[i]].values, df["LATITUDE"][df["YEAR"] == years[i]].values)
x += x1.tolist()
y += y1.tolist()
x = np.array(x)
y = np.array(y)
if prev_layer:
prev_layer.remove()
hexlayer = mm.hexbin(x, y, gridsize = 75, bins = 100, mincnt = 0, cmap = 'my_cmap', linewidth = 0)
prev_layer = None
ani = animation.FuncAnimation(fig, update_hex, interval = 10, frames = range(len(years)), fargs = (prev_layer, ))
plt.show()
在这种情况下,我会使用一个全局数组来存储hexbin()
返回的对象。在预定义的时间间隔内,我会删除这些对象,清空数组的内容,然后重复。
fig, ax = plt.subplots()
def animate(i):
x0,y0 = np.random.random(size=(2,))*4-2
x = np.random.normal(loc=x0, size=(1000,))
y = np.random.normal(loc=y0, size=(1000,))
if len(prevlayers)>=maxlayers:
for layer in prevlayers:
layer.remove()
prevlayers[:] = []
hexlayer = ax.hexbin(x,y, gridsize=10, alpha=0.5)
prevlayers.append(hexlayer)
return hexlayer,
maxlayers = 3
prevlayers = []
ani = matplotlib.animation.FuncAnimation(fig, animate, frames=12)