【问题标题】:Matplotlib / Cartopy - Animation Blank using FuncAnimation in Jupyter NotebooksMatplotlib / Cartopy - 在 Jupyter Notebooks 中使用 FuncAnimation 的动画空白
【发布时间】:2019-11-26 00:53:05
【问题描述】:

我使用 IPython Display 模块制作了相同的动画,但我希望它是交互式的,所以我尝试使用 matplotlib 动画模块。如果我使用%matplotlib notebook 运行以下命令,它只会返回一个空白屏幕。如果我用%matplotlib inline 运行它,它只返回第一帧。如果我在内联模式下运行并使用 IPython.dispay 中的 HTML 模块将其保存为 HTML5 视频,它会显示一个空白屏幕的视频,并且在其下方显示最后一帧(不是第一帧)。

下面是代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib import colors
from matplotlib import animation
import random

import cartopy.crs as ccrs
from cartopy.io.shapereader import Reader
from cartopy.feature import ShapelyFeature

fname = r'D:\Downloads\gadm36_USA_shp\gadm36_USA_2.shp'

fig = plt.figure()
ax = plt.axes((-82.65, 27.65, 0.595, 0.5), projection=ccrs.PlateCarree())
shape_feature = ShapelyFeature(Reader(fname).geometries(), ccrs.PlateCarree(), edgecolor='black')
ax.add_feature(shape_feature, alpha=0.5)

ax.set_extent([-82.65,-82.055,27.65,28.15])

cmap = colors.ListedColormap(['0000', 'green', 'yellow', 'orange', 'red'])
bounds = [0, .25, .5, .75, .9, 1]
norm = colors.BoundaryNorm(bounds, cmap.N)
pdf = plt.imshow(np.zeros((20,20)), cmap=cmap, extent=(-82.65,-82.055,27.65,28.15))

def search():
    ...
    yield [op, norm]
    ...

def plot_search(args):
    op = args[0]
    updated_norm = args[1]

    new_z = op.reshape((20,20))

    pdf.set_norm(updated_norm)
    pdf.set_data(new_z)
    return [pdf]
ani = animation.FuncAnimation(fig, plot_search, frames=search, blit=True)
plt.plot()

search() 是一个生成器函数。即使我用list(search()) 包裹它,它仍然不起作用。

我是 matplotlib / cartopy 的新手,非常感谢任何帮助!

【问题讨论】:

    标签: python matplotlib jupyter-notebook cartopy


    【解决方案1】:

    您在调用axes 时的定义有点奇怪。我认为当您使用笔记本时,它通过使用“紧密”边界框来保存,这意味着它会自动调整图像大小以适应绘图上的内容——在您的情况下,它会使图像变大。在笔记本外使用时,默认图像不适合您定义的轴。以下对我有用:

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib import cm
    from matplotlib import colors
    from matplotlib import animation
    import random
    
    import cartopy.crs as ccrs
    from cartopy.io.shapereader import Reader
    from cartopy.feature import ShapelyFeature
    
    #fname = r'D:\Downloads\gadm36_USA_shp\gadm36_USA_2.shp'
    
    fig = plt.figure()
    ax = plt.axes(projection=ccrs.PlateCarree())
    #shape_feature = ShapelyFeature(Reader(fname).geometries(), ccrs.PlateCarree(), edgecolor='black')
    #ax.add_feature(shape_feature, alpha=0.5)
    
    ax.set_extent([-82.65,-82.055,27.65,28.15])
    
    cmap = colors.ListedColormap(['0000', 'green', 'yellow', 'orange', 'red'])
    bounds = [0, .25, .5, .75, .9, 1]
    norm = colors.BoundaryNorm(bounds, cmap.N)
    pdf = plt.imshow(np.zeros((20,20)), cmap=cmap, extent=(-82.65,-82.055,27.65,28.15))
    
    def search():
        yield np.random.randn(400), plt.Normalize(-1, 1)
    
    def plot_search(args):
        op, updated_norm = args
    
        new_z = op.reshape((20,20))
    
        pdf.set_norm(updated_norm)
        pdf.set_data(new_z)
        return [pdf]
    ani = animation.FuncAnimation(fig, plot_search, frames=search, blit=True)
    plt.show()
    

    如果您手动创建坐标区,您还可以查看this example 的参数外观。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 2021-10-27
      • 1970-01-01
      相关资源
      最近更新 更多