def _matrix_plot_container_default(self): matrix = np.nan_to_num(self.matrix) width = matrix.shape[0] # create a plot data object and give it this data plot_data = ArrayPlotData() plot_data.set_data("values", matrix) # create the plot plot = Plot(plot_data, origin=self.origin) img_plot = plot.img_plot("values", interpolation='nearest', xbounds=(0, width), ybounds=(0, width), colormap=self._create_colormap())[0] #### fix axes self._remove_grid_and_axes(plot) axis = self._create_increment_one_axis(plot, 0.5, width, 'bottom') self._add_value_axis(plot, axis) axis = self._create_increment_one_axis( plot, 0.5, width, 'left', ticks=[str(i) for i in range(width - 1, -1, -1)]) self._add_index_axis(plot, axis) #### tweak plot attributes self._set_title(plot) plot.aspect_ratio = 1. # padding [left, right, up, down] plot.padding = [0, 0, 25, 25] # create the colorbar, handing in the appropriate range and colormap colormap = img_plot.color_mapper colorbar = ColorBar(index_mapper=LinearMapper(range=colormap.range), color_mapper=colormap, plot=img_plot, orientation='v', resizable='v', width=20, padding=[0, 20, 0, 0]) colorbar.padding_top = plot.padding_top colorbar.padding_bottom = plot.padding_bottom # create a container to position the plot and the colorbar side-by-side container = HPlotContainer(use_backbuffer=True) container.add(plot) container.add(colorbar) container.bgcolor = 0xFFFFFF self.decorate_plot(container, self.matrix) return container
def _matrix_plot_container_default(self): matrix = np.nan_to_num(self.matrix) width = matrix.shape[0] # create a plot data object and give it this data plot_data = ArrayPlotData() plot_data.set_data("values", matrix) # create the plot plot = Plot(plot_data, origin=self.origin) img_plot = plot.img_plot("values", interpolation='nearest', xbounds=(0, width), ybounds=(0, width), colormap=self._create_colormap())[0] #### fix axes self._remove_grid_and_axes(plot) axis = self._create_increment_one_axis(plot, 0.5, width, 'bottom') self._add_value_axis(plot, axis) axis = self._create_increment_one_axis( plot, 0.5, width, 'left', ticks=[str(i) for i in range(width-1, -1, -1)]) self._add_index_axis(plot, axis) #### tweak plot attributes self._set_title(plot) plot.aspect_ratio = 1. # padding [left, right, up, down] plot.padding = [0, 0, 25, 25] # create the colorbar, handing in the appropriate range and colormap colormap = img_plot.color_mapper colorbar = ColorBar(index_mapper=LinearMapper(range=colormap.range), color_mapper=colormap, plot=img_plot, orientation='v', resizable='v', width=20, padding=[0, 20, 0, 0]) colorbar.padding_top = plot.padding_top colorbar.padding_bottom = plot.padding_bottom # create a container to position the plot and the colorbar side-by-side container = HPlotContainer(use_backbuffer=True) container.add(plot) container.add(colorbar) container.bgcolor = 0xFFFFFF self.decorate_plot(container, self.matrix) return container
def _theta_plot_default(self): """Create plot of theta parameters.""" # We plot both the thetas and the samples from the posterior; if the # latter are not defined, the corresponding ArrayPlotData names # should be set to an empty list, so that they are not displayed theta = self.model.theta theta_len = theta.shape[0] # create the plot data if not self.theta_plot_data: self.theta_plot_data = ArrayPlotData() self._update_plot_data() # create the plot theta_plot = Plot(self.theta_plot_data) for idx in range(theta_len): # candle plot summarizing samples over the posterior theta_plot.candle_plot((_w_idx('index', idx), _w_idx('min', idx), _w_idx('barmin', idx), _w_idx('avg', idx), _w_idx('barmax', idx), _w_idx('max', idx)), color = get_annotator_color(idx), bar_line_color = "black", stem_color = "blue", center_color = "red", center_width = 2) # plot of raw samples theta_plot.plot((_w_idx('ysamples', idx), _w_idx('xsamples', idx)), type='scatter', color='black', marker='dot', line_width=0.5, marker_size=1) # plot current parameters theta_plot.plot((_w_idx('y', idx), _w_idx('x', idx)), type='scatter', color=get_annotator_color(idx), marker='plus', marker_size=8, line_width=2) # adjust axis bounds theta_plot.range2d = self._compute_range2d() # remove horizontal grid and axis theta_plot.underlays = [theta_plot.x_grid, theta_plot.y_axis] # create new horizontal axis label_list = [str(i) for i in range(theta_len)] label_axis = LabelAxis( theta_plot, orientation = 'bottom', positions = range(1, theta_len+1), labels = label_list, label_rotation = 0 ) # use a FixedScale tick generator with a resolution of 1 label_axis.tick_generator = ScalesTickGenerator(scale=FixedScale(1.)) theta_plot.index_axis = label_axis theta_plot.underlays.append(label_axis) theta_plot.padding = 25 theta_plot.padding_left = 40 theta_plot.aspect_ratio = 1.0 container = VPlotContainer() container.add(theta_plot) container.bgcolor = 0xFFFFFF self.decorate_plot(container, theta) self._set_title(theta_plot) return container
def _theta_plot_default(self): theta = self.theta nannotators = theta.shape[0] samples = self.theta_samples # plot data object plot_data = ArrayPlotData() # create the plot plot = Plot(plot_data) # --- plot theta as vertical dashed lines # add vertical lines extremes plot_data.set_data('line_extr', [0., 1.]) for k in range(nannotators): name = self._theta_name(k) plot_data.set_data(name, [theta[k], theta[k]]) plots = {} for k in range(nannotators): name = self._theta_name(k) line_plot = plot.plot( (name, 'line_extr'), line_width = 2., color = get_annotator_color(k), line_style = 'dash', name = name ) plots[name] = line_plot # --- plot samples as distributions if samples is not None: bins = np.linspace(0., 1., 100) max_hist = 0. for k in range(nannotators): name = self._theta_name(k) + '_distr_' hist, x = np.histogram(samples[:,k], bins=bins) hist = hist / float(hist.sum()) max_hist = max(max_hist, hist.max()) # make "bars" out of histogram values y = np.concatenate(([0], np.repeat(hist, 2), [0])) plot_data.set_data(name+'x', np.repeat(x, 2)) plot_data.set_data(name+'y', y) for k in range(nannotators): name = self._theta_name(k) + '_distr_' plot.plot((name+'x', name+'y'), line_width = 2., color = get_annotator_color(k) ) # --- adjust plot appearance plot.aspect_ratio = 1.6 if is_display_small() else 1.7 plot.padding = [20,0,10,40] # adjust axis bounds x_low, x_high = theta.min(), theta.max() y_low, y_high = 0., 1. if samples is not None: x_high = max(x_high, samples.max()) x_low = min(x_low, samples.min()) y_high = max_hist plot.range2d = DataRange2D( low = (max(x_low-0.05, 0.), y_low), high = (min(x_high*1.1, 1.), min(y_high*1.1, 1.)) ) # label axes plot.value_axis.title = 'Probability' plot.index_axis.title = 'Theta' # add legend legend = Legend(component=plot, plots=plots, align="ul", padding=5) legend.tools.append(LegendTool(legend, drag_button="left")) plot.overlays.append(legend) container = VPlotContainer() container.add(plot) container.bgcolor = 0xFFFFFF self.decorate_plot(container, theta) self._set_title(plot) return container
def _theta_plot_default(self): """Create plot of theta parameters.""" # We plot both the thetas and the samples from the posterior; if the # latter are not defined, the corresponding ArrayPlotData names # should be set to an empty list, so that they are not displayed theta = self.model.theta theta_len = theta.shape[0] # create the plot data if not self.theta_plot_data: self.theta_plot_data = ArrayPlotData() self._update_plot_data() # create the plot theta_plot = Plot(self.theta_plot_data) for idx in range(theta_len): # candle plot summarizing samples over the posterior theta_plot.candle_plot((_w_idx('index', idx), _w_idx('min', idx), _w_idx('barmin', idx), _w_idx('avg', idx), _w_idx('barmax', idx), _w_idx('max', idx)), color = get_annotator_color(idx), bar_line_color = "black", stem_color = "blue", center_color = "red", center_width = 2) # plot of raw samples theta_plot.plot((_w_idx('ysamples', idx), _w_idx('xsamples', idx)), type='scatter', color='black', marker='dot', line_width=0.5, marker_size=1) # plot current parameters theta_plot.plot((_w_idx('y', idx), _w_idx('x', idx)), type='scatter', color=get_annotator_color(idx), marker='plus', marker_size=8, line_width=2) # adjust axis bounds theta_plot.range2d = self._compute_range2d() # remove horizontal grid and axis theta_plot.underlays = [theta_plot.x_grid, theta_plot.y_axis] # create new horizontal axis label_list = [str(i) for i in range(theta_len)] label_axis = LabelAxis( theta_plot, orientation = 'bottom', positions = list(range(1, theta_len+1)), labels = label_list, label_rotation = 0 ) # use a FixedScale tick generator with a resolution of 1 label_axis.tick_generator = ScalesTickGenerator(scale=FixedScale(1.)) theta_plot.index_axis = label_axis theta_plot.underlays.append(label_axis) theta_plot.padding = 25 theta_plot.padding_left = 40 theta_plot.aspect_ratio = 1.0 container = VPlotContainer() container.add(theta_plot) container.bgcolor = 0xFFFFFF self.decorate_plot(container, theta) self._set_title(theta_plot) return container
def create_plot(self): if hasattr(self.value, 'shadows'): color_gen = color_generator() shadowcolors = {} for shadow in self.value.shadows: shadowcolors[shadow] = color_gen.next() container_class = { 'h': HPlotContainer, 'v': VPlotContainer }[self.orientation] container = container_class(spacing=15, padding=15, bgcolor='transparent') container.fill_padding = True container.bgcolor = (236 / 255.0, 233 / 255.0, 216 / 255.0) if self.show_all: self.plot_items = self.value.keys() if len(self.plot_items) > 0: plot_configs = [] for (plot_num, var_name) in enumerate(self.plot_items): if not (isinstance(self.value[var_name], ndarray) and \ len(self.value[var_name].shape) == 1): continue plot_configs.append( PlotConfig(x=var_name + '_index', y=var_name, type='Line', number=plot_num)) self.plot_configs = plot_configs if len(self.plot_configs) > 0: number_to_plots = {} for plot_config in self.plot_configs: plotlist = number_to_plots.get(plot_config.number, []) plotlist.append(plot_config) number_to_plots[plot_config.number] = plotlist keys = number_to_plots.keys() keys.sort() container_list = [number_to_plots[number] for number in keys] for plot_group in container_list: context_adapter = PlotDataContextAdapter(context=self.value) plot = Plot(context_adapter) plot.padding = 15 plot.padding_left = 35 plot.padding_bottom = 30 plot.spacing = 15 plot.border_visible = True for plot_item in plot_group: if len(self.value[plot_item.y].shape) == 2: color_range = DataRange1D( low=min(self.value[plot_item.y]), high=max(self.value[plot_item.y])) plot.img_plot(plot_item.y, colormap=gray(color_range), name=plot_item.y) else: plot_type = { 'Line': 'line', 'Scatter': 'scatter' }[plot_item.type] plot.plot( (plot_item.x, plot_item.y), name=plot_item.x + " , " + plot_item.y, color=(.7, .7, .7), type=plot_type, ) if plot.index_axis.title != '': plot.index_axis.title = plot.index_axis.title + ', ' + plot_item.x else: plot.index_axis.title = plot_item.x if plot.value_axis.title != '': plot.value_axis.title = plot.value_axis.title + ', ' + plot_item.y else: plot.value_axis.title = plot_item.y if self.view_shadows and hasattr( self.value, 'shadows'): self.generate_shadow_plots(plot, shadowcolors, plot_item, plot_type) plot.tools.append(PanTool(plot)) container.add(plot) self.plot = container
def create_plot(self): if hasattr(self.value, 'shadows'): color_gen = color_generator() shadowcolors = {} for shadow in self.value.shadows: shadowcolors[shadow] = color_gen.next() container_class = {'h' : HPlotContainer, 'v' : VPlotContainer}[self.orientation] container = container_class(spacing=15, padding=15, bgcolor = 'transparent') container.fill_padding = True container.bgcolor=(236/255.0, 233/255.0, 216/255.0) if self.show_all: self.plot_items = self.value.keys() if len(self.plot_items)>0: plot_configs = [] for (plot_num, var_name) in enumerate(self.plot_items): if not (isinstance(self.value[var_name], ndarray) and \ len(self.value[var_name].shape) == 1): continue plot_configs.append(PlotConfig(x=var_name + '_index', y=var_name, type='Line', number=plot_num)) self.plot_configs = plot_configs if len(self.plot_configs)>0: number_to_plots = {} for plot_config in self.plot_configs: plotlist = number_to_plots.get(plot_config.number, []) plotlist.append(plot_config) number_to_plots[plot_config.number] = plotlist keys = number_to_plots.keys() keys.sort() container_list = [number_to_plots[number] for number in keys] for plot_group in container_list: context_adapter = PlotDataContextAdapter(context=self.value) plot = Plot(context_adapter) plot.padding = 15 plot.padding_left=35 plot.padding_bottom = 30 plot.spacing=15 plot.border_visible = True for plot_item in plot_group: if len(self.value[plot_item.y].shape) == 2: color_range = DataRange1D(low=min(self.value[plot_item.y]), high=max(self.value[plot_item.y])) plot.img_plot(plot_item.y, colormap=gray(color_range), name=plot_item.y) else: plot_type = {'Line':'line', 'Scatter':'scatter'}[plot_item.type] plot.plot((plot_item.x, plot_item.y), name=plot_item.x + " , " + plot_item.y, color=(.7, .7, .7), type=plot_type,) if plot.index_axis.title != '': plot.index_axis.title = plot.index_axis.title + ', ' + plot_item.x else: plot.index_axis.title = plot_item.x if plot.value_axis.title != '': plot.value_axis.title = plot.value_axis.title + ', ' + plot_item.y else: plot.value_axis.title = plot_item.y if self.view_shadows and hasattr(self.value, 'shadows'): self.generate_shadow_plots(plot, shadowcolors, plot_item, plot_type) plot.tools.append(PanTool(plot)) container.add(plot) self.plot = container