90845


下記のコードにてmatplotlibのplot_surfaceを利用した3Dアニメーションを作成しようとしました。  
一見うまく行っているようですが、次第に重くなっていきます。

おそらくどこかでクリアすべきなんでしょうが、うまくいきません。

ご教示願えれば幸いです。  
よろしくお願いいたします。

[code]

    import matplotlib.pyplot as plt
    import matplotlib.animation as animation
    from mpl_toolkits.mplot3d import Axes3D
    from scipy.interpolate import griddata
    import numpy as np
    
    fig = plt.figure()
    ax = fig.add_subplot(projection='3d')
    
    def update(i, x, y, z, plott, pst, figt, axt, cb):
       i = i - 7
        #plott[0].remove() # <-- この書き方はエラーになる(ypeError: list.remove() takes exactly one argument (0 given))
    
       for j in range(-10, 10):
          x.append(j)
          y.append(i)
          z.append(i ** 2 + j ** 2)
    
       x_new, y_new = np.meshgrid(np.unique(x), np.unique(y))
       z_new = griddata((x, y), z, (x_new, y_new))
    
       pst = ax.plot_surface(x_new, y_new, z_new , cmap="plasma")
       plott[0] = [pst]
    
    x = []
    y = []
    z = []
    for i in range(-10, -8):
        for j in range(-10, 10):
            x.append(j)
            y.append(i)
            z.append(i ** 2 + j ** 2)
    
    x_new, y_new = np.meshgrid(np.unique(x), np.unique(y))
    z_new = griddata((x, y), z, (x_new, y_new))
    
    ps = ax.plot_surface(x_new, y_new, z_new , cmap="plasma")
    plot= [ps]
    cb = fig.colorbar(ps)
    
    ani = animation.FuncAnimation(fig, update, fargs=(x, y, z, plot, ps, fig, ax, cb), interval=1000)
    plt.show()
    
[/code]


CC BY-SA 4.0
2022-08-30T13:50:53.670
90842
2022-09-01T02:17:48.470
2022-09-01T02:17:48.470
3060
45645
question
python python3 matplotlib
matplotlibのplot_surfaceを利用した3Dアニメーション作成時に動作が次第に重くなる


`pst = ax.plot_surface(x_new, y_new, z_new ,
cmap="plasma")`の前に`ax.cla()`を追加してはどうでしょうか？


CC BY-SA 4.0
2022-08-30T17:40:24.087
90845
2022-08-30T17:40:24.087
39819
90842
answer