Created
August 24, 2021 15:09
-
-
Save Winand/bf2ce049d23bf3e8a1f5bff337817442 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pickle | |
import threading | |
import time | |
import ipywidgets as widgets | |
import matplotlib.pyplot as plt | |
import numpy as np | |
def init_history_plot(): | |
""" | |
Create plot template (dump) | |
Returns: pickled str | |
""" | |
# plt.figure(figsize=(15, 1.2)) | |
# ax = plt.axes() | |
fig, ax = plt.subplots(figsize=(15, 1.2)) | |
# Y axis min-max | |
ax.set_ylim(0, 100) | |
# ax.get_xaxis().set_visible(False) | |
ax.grid(axis='y') | |
# right tick labels https://stackoverflow.com/a/13369977 | |
ax.yaxis.tick_right() | |
# hide ticks https://stackoverflow.com/a/33707647 | |
ax.yaxis.set_ticks_position('none') | |
# borders https://stackoverflow.com/a/27361819 | |
# for i in ax.spines.values(): # 'left', 'right', 'top', 'bottom' | |
# ax.spines[i].set_visible(False) | |
# https://stackoverflow.com/questions/18603959/borderless-matplotlib-plots | |
ax.set_frame_on(False) | |
dat = pickle.dumps(fig) | |
plt.close() | |
return dat | |
def load_figure(dump): | |
""" | |
Load Figure from dump | |
Returns: (Figure, Axes) | |
""" | |
# https://github.com/ipython/ipykernel/issues/231 | |
import ipykernel.pylab.backend_inline as back_inline | |
import matplotlib.backends.backend_agg as back_agg | |
back_inline.new_figure_manager_given_figure = back_agg.new_figure_manager_given_figure | |
figure = pickle.loads(dump) | |
# https://github.com/matplotlib/matplotlib/issues/17627/ | |
figure._cachedRenderer = None | |
return figure, figure.axes[0] | |
template_fig = init_history_plot() | |
btn_start = widgets.ToggleButton(description="Start thread") | |
plt1_parent = widgets.Output() | |
plt2_parent = widgets.Output() | |
_interface = widgets.VBox(children=[btn_start, plt1_parent, plt2_parent]) | |
def worker(): | |
while btn_start.value: | |
with plt1_parent: | |
plt1_parent.clear_output(wait=True) | |
fig, ax = load_figure(template_fig) | |
dat = np.random.normal(scale=20, size=50) + 50 | |
ax.plot(dat, color='green') | |
plt.show() | |
# THE FOLLOWING BLOCK BLINKS | |
with plt2_parent: | |
plt2_parent.clear_output(wait=True) | |
fig, ax = load_figure(template_fig) | |
dat = np.random.normal(scale=20, size=50) + 50 | |
ax.plot(dat, color='red') | |
plt.show() | |
############################ | |
time.sleep(1) | |
def start_thread(_): | |
if btn_start.value: | |
thread = threading.Thread(target=worker) | |
thread.start() | |
btn_start.observe(start_thread, 'value') | |
_interface |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment