2016-10-19 11 views
8

chcę wdrożyć interaktywny wykres korzystając matplotlib i ipywidgets w ipython (python3). Jak mogę to zrobić sprawnie (zmiana płynnie bez opóźnień)?Interactive matplotlib użyciu ipywidgets

Kolejnym pytaniem jest, dlaczego ten kod działa ?!

from ipywidgets import * 
import numpy as np 
import matplotlib.pyplot as plt 
%matplotlib inline 

x = np.linspace(0, 2 * np.pi) 

def update(w = 1.0): 
    fig = plt.figure() 
    ax = fig.add_subplot(1, 1, 1) 
    ax.plot(x, np.sin(w * x)) 

    fig.canvas.draw() 

interact(update); 

enter image description here

Ale to nie działa ?!

from ipywidgets import * 
import numpy as np 
import matplotlib.pyplot as plt 
%matplotlib inline 

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() 

interact(update); 

enter image description here

+0

Czy kiedykolwiek znalazłeś sposób, aby drugi przykład zadziałał? Mam teraz ten sam problem. – mdornfe1

Odpowiedz

2

Drugie podejście jest właściwe dla backend notebooka

%matplotlib notebook 

Albo z ipympl.

Jednak nie będzie działać z wewnętrznym backendem, który nie aktualizuje wykresu.

+1

Dla mnie drugie podejście nie działa dla zaplecza notebooka. W ogóle nie jest wyświetlany wykres. – tfv

+0

Polecam używanie ipympl (aka jupyter-matplotlib), który jest zapleczem notebooka podzielonym na osobny pakiet. Powodem podziału jest to, że cykle wydawnicze Jupytera są znacznie szybsze niż matplotlib. ipympl jest oddzielony od matplotlib, aby móc go lepiej śledzić. – Quant

Powiązane problemy