Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import pandas as pd
- from bokeh.layouts import row, widgetbox
- from bokeh.models.widgets import TextInput
- import holoviews as hv
- from bokeh.plotting import figure
- import weakref
- class Debug(object):
- _id2obj_dict = weakref.WeakValueDictionary()
- def remember(obj):
- oid = id(obj)
- Debug._id2obj_dict[oid] = obj
- return oid
- def id2obj(oid):
- return Debug._id2obj_dict[oid]
- class layout_object(object):
- def __init__(self):
- print("layout instance initialized")
- self.obj_id = remember(self)
- #contains holoviews dynamic maps
- self.webpage_layout = []
- #contains bokeh plots and controller
- self.webpage = []
- self.stream = hv.streams.RangeXY(x_range=None,y_range=None,transient=True)
- def create_layout_holoviews(self):
- # initialize renderer that transforms holoviews objects into bokeh plots
- renderer = hv.renderer('bokeh').instance(mode='server')
- for obj_id in self.webpage_layout:
- if id2obj(obj_id) is not None:
- obj = id2obj(obj_id)
- if obj.controller is not None:
- # if controller exist, create 2 column view
- self.webpage.append([renderer.get_plot(obj.plot_container).state,obj.controller])
- def create_layout_bokeh(self):
- for obj_id in self.webpage_layout:
- if id2obj(obj_id) is not None:
- obj = id2obj(obj_id)
- if obj.controller is not None:
- self.webpage.append([obj.bokeh_plot,obj.controller])
- def __del__(self):
- print("layout instance deleted")
- class plot_object(object):
- def __init__(self, layout_obj):
- print("plot instance initialized")
- self.obj_id = remember(self)
- self.layout_obj_id = id(layout_obj)
- layout_obj.webpage_layout.append(id(self))
- self.stream = layout_obj.stream
- self.controller = widgetbox(TextInput(value="controller", title="Test controller",
- ))
- self.bokeh_plot = figure(title="simple line example", x_axis_label='x', y_axis_label='y')
- # add a line renderer with legend and line thickness
- self.bokeh_plot.line([1,2], [3,4], line_width=2)
- #def __del__(self):
- # print("plot instance deleted")
- def plot(self,x_range=None,y_range=None):
- """
- holoviews plot for dynamicmap
- """
- def rectangle(x=0, y=0, width=.05, height=.05):
- return np.array([(x,y), (x+width, y), (x+width, y+height), (x, y+height)])
- return hv.Polygons([{('x', 'y'): rectangle(x, y), 'level': z}
- for x, y, z in np.random.rand(100, 3)], vdims='level').redim.range(x=(-.1,1.1), y=(-0.1, 1.1))
- def set_up_plot_container(self):
- self.plot_container = hv.DynamicMap(self.plot,streams=[self.stream])
Add Comment
Please, Sign In to add comment