Поместить код в функцию
Есть код. Нужно его оформить в виде одной функции, что бы вызывать его при необходимости. Проблема в том, что когда код помещаю в функцию, и пытаюсь ее выполнить, выдается ошибка: NameError: name 'slider_sigma' is not defined
import numpy
import pylab
from matplotlib.widgets import Slider
def gauss(sigma, mu, x):
# '''Отображаемая фукнция'''
return (1.0 / (sigma * numpy.sqrt(2.0 * numpy.pi)) *
numpy.exp(-((x - mu) ** 2) / (2 * sigma * sigma)))
def updateGraph():
# '''!!! Функция для обновления графика'''
global slider_sigma
global slider_mu
global graph_axes
sigma = slider_sigma.val
mu = slider_mu.val
x = numpy.arange(-5.0, 5.0, 0.01)
y = gauss(sigma, mu, x)
graph_axes.clear()
graph_axes.plot(x, y)
pylab.draw()
def onChangeValue(value):
# '''!!! Обработчик события изменения значений слайдеров'''
updateGraph()
# Создадим окно с графиком
fig, graph_axes = pylab.subplots()
graph_axes.grid()
# Оставим снизу от графика место для виджетов
fig.subplots_adjust(left=0.07, right=0.95, top=0.95, bottom=0.4)
# Создание слайдера для задания sigma
axes_slider_sigma = pylab.axes([0.05, 0.25, 0.85, 0.04])
slider_sigma = Slider(axes_slider_sigma,
label='σ',
valmin=0.1,
valmax=1.0,
valinit=0.5,
valfmt='%1.2f')
# !!! Подпишемся на событие при изменении значения слайдера.
slider_sigma.on_changed(onChangeValue)
# Создание слайдера для задания mu
axes_slider_mu = pylab.axes([0.05, 0.17, 0.85, 0.04])
slider_mu = Slider(axes_slider_mu,
label='μ',
valmin=-4.0,
valmax=4.0,
valinit=0.0,
valfmt='%1.2f')
# !!! Подпишемся на событие при изменении значения слайдера.
slider_mu.on_changed(onChangeValue)
updateGraph()
pylab.show()
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Лучше так, чтобы лишнее в функцию не передавать и без глобальных переменных:
def updateGraph(sigma, mu, graph_axes):
# '''!!! Функция для обновления графика'''
x = numpy.arange(-5.0, 5.0, 0.01)
y = gauss(sigma, mu, x)
graph_axes.clear()
graph_axes.plot(x, y)
pylab.draw()
# здесь остальной код с созданием слайдеров
updateGraph(slider_sigma.val, slider_mu.val, graph_axes)
Может и ошибка исчезнет. Либо станет понятно, что ошибка не там.
Я, кстати, попробовал в Google Colaboratory ваш код - у меня всё работает. И мой вариант кода тоже работает.
