I’d like to animate the result of
plt.contour using a slider to modify the values of the
Z array that it takes in. Looking around there doesn’t seem to any sort of
set_data method so I’m approaching this by doing:
import matplotlib.pyplot as plt import numpy as np from matplotlib.widgets import Slider import mpl_interactions.ipyplot as iplt fig, ax = plt.subplots() plt.subplots_adjust(bottom=0.25) delta = 0.025 x = np.arange(-3.0, 3.0, delta) y = np.arange(-2.0, 2.0, delta) X, Y = np.meshgrid(x, y) def Z(beep): Z1 = beep * np.exp(-X**2 - Y**2) Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2) return (Z1 - Z2) * 2 contours = ax.contour(X,Y,Z(0)) def callback(value): global contours for c in contours.collections: c.remove() contours = ax.contour(X,Y,Z(value)) slider_ax = plt.axes([0.25, 0.1, 0.65, 0.03]) slider = Slider(slider_ax, label="freq", valmin=0.05, valmax=10) slider.on_changed(callback) plt.show()
which seems to work well.
My question is essentially is there something I’m missing here that will come back to bite me? I’m worried by the fact that I’m iterating over artists and that I seem to leave the original collection just hanging around. Is there any better way?