Skip to content

Instantly share code, notes, and snippets.

@kervel
Created April 2, 2020 14:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kervel/cf8a4db2d62d8f98ac023269578e5e4c to your computer and use it in GitHub Desktop.
Save kervel/cf8a4db2d62d8f98ac023269578e5e4c to your computer and use it in GitHub Desktop.
def make_box_layout():
return widgets.Layout(
border='solid 1px black',
margin='0px 10px 10px 0px',
padding='5px 5px 5px 5px'
)
class Sines(widgets.HBox):
def __init__(self):
super().__init__()
output = widgets.Output()
self.x = np.linspace(0, 2 * np.pi, 100)
initial_color = '#FF00DD'
with output:
self.fig, self.ax = plt.subplots(constrained_layout=True, figsize=(5, 3.5))
self.line, = self.ax.plot(self.x, np.sin(self.x), initial_color)
self.fig.canvas.toolbar_position = 'bottom'
self.ax.grid(True)
# define widgets
int_slider = widgets.IntSlider(
value=1,
min=0,
max=10,
step=1,
description='freq'
)
color_picker = widgets.ColorPicker(
value=initial_color,
description='pick a color'
)
text_xlabel = widgets.Text(
value='',
description='xlabel',
continuous_update=False
)
text_ylabel = widgets.Text(
value='',
description='ylabel',
continuous_update=False
)
controls = widgets.VBox([
int_slider,
color_picker,
text_xlabel,
text_ylabel
])
controls.layout = make_box_layout()
out_box = widgets.Box([output])
output.layout = make_box_layout()
# observe stuff
int_slider.observe(self.update, 'value')
color_picker.observe(self.line_color, 'value')
text_xlabel.observe(self.update_xlabel, 'value')
text_ylabel.observe(self.update_ylabel, 'value')
text_xlabel.value = 'x'
text_ylabel.value = 'y'
# add to children
self.children = [controls, output]
def update(self, change):
"""Draw line in plot"""
self.line.set_ydata(np.sin(change.new * self.x))
self.fig.canvas.draw()
def line_color(self, change):
self.line.set_color(change.new)
def update_xlabel(self, change):
self.ax.set_xlabel(change.new)
def update_ylabel(self, change):
self.ax.set_ylabel(change.new)
Sines()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment