Guest User

Untitled

a guest
Mar 23rd, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.96 KB | None | 0 0
  1. import numpy as np
  2. import pandas as pd
  3. from bokeh.layouts import row, widgetbox
  4. from bokeh.models.widgets import TextInput
  5. import holoviews as hv
  6. from bokeh.plotting import figure
  7. import weakref
  8.  
  9.  
  10. class Debug(object):
  11. _id2obj_dict = weakref.WeakValueDictionary()
  12.  
  13. def remember(obj):
  14. oid = id(obj)
  15. Debug._id2obj_dict[oid] = obj
  16. return oid
  17.  
  18. def id2obj(oid):
  19. return Debug._id2obj_dict[oid]
  20.  
  21. class layout_object(object):
  22.  
  23. def __init__(self):
  24. print("layout instance initialized")
  25. self.obj_id = remember(self)
  26. #contains holoviews dynamic maps
  27. self.webpage_layout = []
  28.  
  29. #contains bokeh plots and controller
  30. self.webpage = []
  31. self.stream = hv.streams.RangeXY(x_range=None,y_range=None,transient=True)
  32.  
  33. def create_layout_holoviews(self):
  34.  
  35. # initialize renderer that transforms holoviews objects into bokeh plots
  36. renderer = hv.renderer('bokeh').instance(mode='server')
  37.  
  38. for obj_id in self.webpage_layout:
  39. if id2obj(obj_id) is not None:
  40. obj = id2obj(obj_id)
  41. if obj.controller is not None:
  42. # if controller exist, create 2 column view
  43. self.webpage.append([renderer.get_plot(obj.plot_container).state,obj.controller])
  44.  
  45. def create_layout_bokeh(self):
  46. for obj_id in self.webpage_layout:
  47. if id2obj(obj_id) is not None:
  48. obj = id2obj(obj_id)
  49. if obj.controller is not None:
  50. self.webpage.append([obj.bokeh_plot,obj.controller])
  51. def __del__(self):
  52. print("layout instance deleted")
  53.  
  54.  
  55.  
  56. class plot_object(object):
  57.  
  58. def __init__(self, layout_obj):
  59. print("plot instance initialized")
  60. self.obj_id = remember(self)
  61. self.layout_obj_id = id(layout_obj)
  62. layout_obj.webpage_layout.append(id(self))
  63. self.stream = layout_obj.stream
  64. self.controller = widgetbox(TextInput(value="controller", title="Test controller",
  65. ))
  66.  
  67. self.bokeh_plot = figure(title="simple line example", x_axis_label='x', y_axis_label='y')
  68.  
  69. # add a line renderer with legend and line thickness
  70. self.bokeh_plot.line([1,2], [3,4], line_width=2)
  71.  
  72. #def __del__(self):
  73. # print("plot instance deleted")
  74.  
  75. def plot(self,x_range=None,y_range=None):
  76. """
  77. holoviews plot for dynamicmap
  78. """
  79.  
  80. def rectangle(x=0, y=0, width=.05, height=.05):
  81. return np.array([(x,y), (x+width, y), (x+width, y+height), (x, y+height)])
  82.  
  83. return hv.Polygons([{('x', 'y'): rectangle(x, y), 'level': z}
  84. for x, y, z in np.random.rand(100, 3)], vdims='level').redim.range(x=(-.1,1.1), y=(-0.1, 1.1))
  85.  
  86.  
  87. def set_up_plot_container(self):
  88. self.plot_container = hv.DynamicMap(self.plot,streams=[self.stream])
Add Comment
Please, Sign In to add comment