#python #matplotlib #jupyter-notebook #ipywidgets
#python #matplotlib #jupyter-ноутбук #ipywidgets
Вопрос:
У меня есть функция, использующая виджеты, которая работает просто отлично, но ползунок немного сложно перемещать небольшими шагами.
Я хочу добавить кнопки для перехода вперед или назад на один шаг по щелчку. Это реализовано в приведенном ниже коде. Моя проблема в том, что когда я перезваниваю исходную функцию myplot
изнутри on_button_
, она снова рисует все, но мне нужен только обновленный точечный график.
Я экспериментировал с plt.close('all')
и plt.show()
, как вы можете видеть.
Моя проблема — я думаю — в том, что я не могу найти подходящее место для их размещения.
import ipywidgets as widgets
from ipywidgets import interact, interact_manual, Button, HBox, fixed
@interact
step = 0.1
def myplot(
x=(0.3, 3, step),
y=(0,8,1)):
###############
def on_button_next(b):
plt.close('all')
myplot(x step, y=y)
def on_button_prev(b):
plt.close('all')
myplot(x-step, y=y)
button_next = Button(description='x ')
button_prev = Button(description='x-')
############################
if x>0.3 :
plt.figure(figsize=(9,7))
ax1 = plt.subplot()
ax1.scatter(x, y, marker='*', s=300)
ax1.set_xlim(0,2)
ax1.set_ylim(0,8)
##### buttons.
display(HBox([button_prev, button_next]))
button_next.on_click(on_button_next)
button_prev.on_click(on_button_prev)
################
return plt.show()
Ответ №1:
Решаемая путем удаления plt.show()
и plt.close()
и записи вместо display(fig)
и clear_output()
from IPython.display import clear_output
step=0.1
@interact
def myplot(
x=(0.3, 3, step),
y=(0,5,1)):
# ##############
def on_button_next(b):
clear_output()
myplot(x step, y=y)
def on_button_prev(b):
clear_output()
myplot(x-step, y=y)
button_next = Button(description='x ')
button_prev = Button(description='x-')
##############
if x>0.3 :
#buttons
display(HBox([button_prev, button_next]))
button_next.on_click(on_button_next)
button_prev.on_click(on_button_prev)
##
fig = plt.figure()
plt.scatter(x, y, marker='*', s=300)
plt.xlim(0.3,2)
plt.ylim(0,8)
plt.close()
display(fig)