Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class MultiPlot():
- range_x_min = 0.0
- range_x_max = 0.0
- def __init__(self):
- self.container = VPlotContainer(background="transparent")
- self.value_mapper = None
- self.index_mapper = None
- self.data = ArrayPlotData()
- def create_sub_container(self, title=None):
- sub_container = OverlayPlotContainer(
- padding_bottom=35,
- padding_top=20,
- padding_left=45,
- padding_right=5,
- fill_padding=True,
- bgcolor="lightgray",
- use_backbuffer=True
- )
- sub_container.overlays.append(
- PlotLabel(title,
- component=sub_container,
- font="swiss 16",
- overlay_position="top"
- )
- )
- self.value_mapper = None
- self.index_mapper = None
- return sub_container
- def add_line_plot(self, sub_container, x=None, y=None, flag=None, label=None, color=None):
- if not color:
- color = tuple(COLOR_PALETTE[len(sub_container.components)])
- plot = create_line_plot(
- (x, y),
- color=color
- )
- if not (self.value_mapper or self.index_mapper):
- self.value_mapper, self.index_mapper = self._setup_plot_tools(plot)
- else:
- self._setup_mapper(plot, self.value_mapper, self.index_mapper)
- sub_container.add(plot)
- def add_scatter_plot(self, sub_container, x=None, y=None, flag=None, label=None, color=None, size=2.0):
- if not color:
- color = tuple(COLOR_PALETTE[len(sub_container.components)])
- plot = create_scatter_plot(
- (x, y),
- color=color,
- marker_size=size
- )
- if not (self.value_mapper or self.index_mapper):
- self.value_mapper, self.index_mapper = self._setup_plot_tools(plot)
- else:
- self._setup_mapper(plot, self.value_mapper, self.index_mapper)
- sub_container.add(plot)
- def add_scatter_line_plot(self, sub_container, x=None, y=None, flag=None, label=None, color=None, size=2.0):
- if not color:
- color = tuple(COLOR_PALETTE[len(sub_container.components)])
- data = ArrayPlotData(x=x, y=y)
- plot = ScatterLinePlot(
- data=data
- # color=color,
- # marker_size=size
- )
- if not (self.value_mapper or self.index_mapper):
- self.value_mapper, self.index_mapper = self._setup_plot_tools(plot)
- else:
- self._setup_mapper(plot, self.value_mapper, self.index_mapper)
- sub_container.add(plot)
- def get_plot(self, sub_containers):
- for sub_container in sub_containers:
- self.container.add(sub_container)
- return self.container
- def _setup_plot_tools(self, plot):
- # Make a white background with grids and axes
- plot.bgcolor = "white"
- add_default_grids(plot)
- add_default_axes(plot, htitle='BJD - 167.0')
- # Tools
- plot.tools.append(PanTool(plot, drag_button="left"))
- zoom = ZoomTool(plot, tool_mode="box", always_on=False)
- plot.overlays.append(zoom)
- # Range selection tool
- value_range = plot.value_mapper.range
- rangeselect = RangeSelection(plot, enable_resize=False, left_button_selects=False)
- plot.tools.append(rangeselect)
- plot.overlays.append(RangeSelectionOverlay(component=plot))
- plot.show_selection = False
- rangeselect.on_trait_event(self.on_selection_changed, "selection")
- return plot.value_mapper, plot.index_mapper
- def on_selection_changed(self, selection):
- if selection is not None:
- self.range_x_max = selection[1]
- self.range_x_min = selection[0]
- def get_selection_range(self):
- return float(self.range_x_min), float(self.range_x_max)
- def _setup_mapper(self, plot, value_mapper, index_mapper):
- """Sets up a mapper for given plot"""
- plot.value_mapper = value_mapper
- value_mapper.range.add(plot.value)
- plot.index_mapper = index_mapper
- index_mapper.range.add(plot.index)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement