Основываясь на примерах this и that, я пытаюсь добавить ползунки к фигуре динамически (в функции объекта, который отображается).matplotlib - добавление ползунков к фигуре динамически
Ползунки создаются и добавляются внутри цикла for, и новая функция update()
создается каждый раз.
Проблемы: ползунки не реагируют на любые входы мыши!
Любая идея, как решить эту проблему?
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.widgets import Slider
class Plotter:
def __init__(self):
self.fig, self.ax = plt.subplots()
def plot(self, obj):
self.obj = obj
self.l = plt.plot(obj.t,obj.series())
vars = obj.get_variables()
plt.subplots_adjust(bottom=0.03*(len(vars)+2))
for i,var in enumerate(vars):
self.add_slider(i*0.03, var[0], var[1], var[2])
plt.show()
def add_slider(self, pos, name, min, max):
ax = plt.axes([0.1, 0.02+pos, 0.8, 0.02], axisbg='lightgoldenrodyellow')
slider = Slider(ax, name, min, max, valinit=getattr(self.obj, name))
def update(val):
setattr(self.obj, name, val)
self.l.set_ydata(self.obj.series())
self.fig.canvas.draw_idle()
slider.on_changed(update)
class SinFunction:
def __init__(self):
self.freq = 1.0
self.amp = 0.5
self.t = np.arange(0.0, 1.0, 0.001)
def series(self):
return self.amp*np.sin(2*np.pi*self.freq*self.t)
def get_variables(self):
return [
('freq', 0.1, 10),
('amp', 0.1, 1)
]
Plotter().plot(SinFunction())
Спасибо! Однако это не устраняет исходную проблему (невосприимчивые слайдеры). Есть подсказки? –
Он работает для меня. Пожалуйста, не могли бы вы рассказать мне, как вы используете код, какие ошибки вы получаете, версии библиотек, ...? – kikocorreoso
Я использую Python 2.7, matplotlib 1.4.3, и я запускаю скрипт из ноутбука IPython. –