Как я могу создать рабочие кнопки рядом с (а не под или над) графиком matplotlib в Jupyter Notebook, используя Python? - PullRequest
0 голосов
/ 13 января 2019

У меня есть 2 кнопки и график, друг под другом Код:

from IPython.display import display
import matplotlib.pyplot as plt

button1 = widgets.Button(description="Yes")
display(button1)
button2 = widgets.Button(description="No")
display(button2)

def logyes(b):
    print("yes")

def logno(b):
    print("no")

button1.on_click(logyes)
button2.on_click(logno)

plt.figure(figsize=(3,3))
plt.plot([1,2],[3,4])

Результат в блокноте Jupyter:

enter image description here

Я бы хотел, чтобы график располагался рядом с кнопками, а не под кнопками. Я попытался использовать в этом примере и изменил строки, начинающиеся с axprev и axnext, на:

axprev = plt.axes([-0.2, 0.75, 0.2, 0.1])
axnext = plt.axes([-0.2, 0.65, 0.2, 0.1])

Получение результата:

enter image description here

Это правильная ориентация (график рядом с кнопками, а не под кнопками), но эти кнопки (Previous, Next) не работают в Jupyter Notebook, поскольку они не являются виджетами IPython.

Как создать рабочие кнопки рядом с графиком в блокноте Jupyter?

1 Ответ

0 голосов
/ 14 января 2019

Matplotlib и ipywidgets, похоже, очень популярны на SO. Обычный подход заключается в использовании виджета Output, а не в построении графика прямо на стандартный вывод, и использовании стандартной магии %matplotlib inline. Вы можете управлять макетом виджета с помощью контейнерных виджетов VBox и HBox.

Мне неясно, что вы хотите, чтобы ваши кнопки делали , но это пример того, как вы можете расположить виджеты в нужном порядке,

%matplotlib inline
import ipywidgets as widgets
import matplotlib.pyplot as plt

button1 = widgets.Button(description="Yes")
button2 = widgets.Button(description="No")
out = widgets.Output()

buttons = widgets.VBox(children=[button1, button2])
all_widgets = widgets.HBox(children=[buttons, out])
display(all_widgets)

def logyes(b):
    print("yes")

def logno(b):
    print("no")

button1.on_click(logyes)
button2.on_click(logno)

with out:
    plt.figure(figsize=(3,3))
    plt.plot([1,2],[3,4])
    plt.show()

enter image description here

...