Расположение виджетов в ipywidgets интерактивно - PullRequest
0 голосов
/ 25 октября 2018

У меня есть этот код интерактивного графика с использованием ipywidgets;но не уверен, как расположить каждую переменную внутри интерактивной функции в виджетах.макет по умолчанию является вертикальным.Но я хочу расположить их горизонтально.

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
plt.style.use('seaborn')
%config InlineBackend.figure_format = 'svg'
from ipywidgets import interactive,interact
#function to plot the different curves
def plot_function(u=1,v=2,w=3,x=4,y=5,z=6):
    time=np.arange(0,1,0.01)
    df=pd.DataFrame({"Y1":np.sin(time*u*2*np.pi),"y2":np.sin(time*v*2*np.pi),"y3":np.sin(time*w*2*np.pi),
                    "y4":np.sin(time*x*2*np.pi),"y5":np.sin(time*y*2*np.pi),"y6":np.sin(time*z*2*np.pi)})
    df.plot()
widget=interactive(plot_function,u=1,v=2,w=3,x=4,y=5,z=6)
widget

Output

1 Ответ

0 голосов
/ 29 октября 2018

interactive ограничен довольно простыми макетами виджетов.Посмотрите на опции Flexbox , если вы хотите настроить их еще немного.

Один простой способ обойти это использовать вызов interactive для генерации и связывания ваших виджетов и функций, а затемреструктурировать виджеты внутри HBox.Затем добавьте макет, который говорит окантовку для переноса в конце строки.Для этого я добавил еще пару импортов и три строки в конце.

1) controls - HBox ваших входных виджетов.

2) Виджет Outputгенерируется вызовом interactive.

3) VBox, который объединяет их вместе.

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
plt.style.use('seaborn')
%config InlineBackend.figure_format = 'svg'
#importing the necessary items from the Ipywidgets library 
from ipywidgets import interactive,interact, HBox, Layout,VBox
#function to plot the different curves
def plot_function(u=1,v=2,w=3,x=4,y=5,z=6):
    time=np.arange(0,1,0.01)
    df=pd.DataFrame({"Y1":np.sin(time*u*2*np.pi),"y2":np.sin(time*v*2*np.pi),"y3":np.sin(time*w*2*np.pi),
                    "y4":np.sin(time*x*2*np.pi),"y5":np.sin(time*y*2*np.pi),"y6":np.sin(time*z*2*np.pi)})
    df.plot()
widget=interactive(plot_function,u=1,v=2,w=3,x=4,y=5,z=6)
controls = HBox(widget.children[:-1], layout = Layout(flex_flow='row wrap'))
output = widget.children[-1]
display(VBox([controls, output]))

enter image description here

...