J'essaie de générer un graphique interactif qui dépend de widgets. Le problème que j'ai, c'est que lorsque je modifie les paramètres à l'aide du curseur, un nouveau tracé est créé après le précédent. Au lieu de cela, je m'attendrais à ce qu'un seul tracé change en fonction des paramètres.
Exemple:
from ipywidgets import interact, interactive, fixed, interact_manual
import ipywidgets as widgets
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
def plot_func(freq):
x = np.linspace(0, 2*np.pi)
y = np.sin(x * freq)
plt.plot(x, y)
interact(plot_func, freq = widgets.FloatSlider(value=7.5,
min=1,
max=5.0,
step=0.5))
Après avoir déplacé le curseur vers 4.0, j'ai:
alors que je veux juste un chiffre à changer que je déplace le curseur. Comment puis-je atteindre cet objectif?
(J'utilise Python 2.7, matplotlib 2.0 et je viens de mettre à jour notebook et jupyter vers la dernière version. Laissez-moi savoir si d'autres informations sont nécessaires.)
Si vous souhaitez modifier le chiffre, au lieu d'en créer un nouveau, permettez-moi de vous suggérer le chemin suivant:
%matplotlib notebook
Donc, le code pourrait ressembler à quelque chose comme ça:
%matplotlib notebook
from ipywidgets import *
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2 * np.pi)
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
line, = ax.plot(x, np.sin(x))
def update(w = 1.0):
line.set_ydata(np.sin(w * x))
fig.canvas.draw_idle()
interact(update);
Sinon, vous pouvez utiliser plt.show()
comme dans cette réponse .
Ceci est un problème (?) Introduit dans la dernière version de jupyter et/ou ipywidgets. Une solution de contournement que j'ai trouvée consistait à ajouter la ligne plt.show()
à la fin de plot_func
.