class MplYRangeROI(AbstractMplRoi): def __init__(self, ax): """ :param ax: A matplotlib Axes object to attach the graphical ROI to """ AbstractMplRoi.__init__(self, ax) self._xi = None self.plot_opts = {'edgecolor': PATCH_COLOR, 'facecolor': PATCH_COLOR, 'alpha': 0.3} trans = blended_transform_factory(self._ax.transAxes, self._ax.transData) self._patch = Rectangle((0., 0.), 1., 1., transform=trans) self._patch.set_zorder(100) self._setup_patch() def _setup_patch(self): self._ax.add_patch(self._patch) self._patch.set_visible(False) self._sync_patch() def _roi_factory(self): return YRangeROI() def start_selection(self, event): if event.inaxes != self._ax: return self._roi.reset() self._roi.set_range(event.ydata, event.ydata) self._xi = event.ydata self._mid_selection = True self._sync_patch() def update_selection(self, event): if not self._mid_selection or event.inaxes != self._ax: return self._roi.set_range(min(event.ydata, self._xi), max(event.ydata, self._xi)) self._sync_patch() def finalize_selection(self, event): self._mid_selection = False self._patch.set_visible(False) self._draw() def _sync_patch(self): if self._roi.defined(): rng = self._roi.range() self._patch.set_xy((0, rng[0])) self._patch.set_height(rng[1] - rng[0]) self._patch.set_width(1) self._patch.set(**self.plot_opts) self._patch.set_visible(True) else: self._patch.set_visible(False) self._draw()
class MplYRangeROI(AbstractMplRoi): def __init__(self, ax): """ :param ax: A matplotlib Axes object to attach the graphical ROI to """ AbstractMplRoi.__init__(self, ax) self._xi = None self.plot_opts = { 'edgecolor': PATCH_COLOR, 'facecolor': PATCH_COLOR, 'alpha': 0.3 } trans = blended_transform_factory(self._ax.transAxes, self._ax.transData) self._patch = Rectangle((0., 0.), 1., 1., transform=trans) self._patch.set_zorder(100) self._ax.add_patch(self._patch) self._sync_patch() def _roi_factory(self): return YRangeROI() def start_selection(self, event): if event.inaxes != self._ax: return self._roi.reset() self._roi.set_range(event.ydata, event.ydata) self._xi = event.ydata self._mid_selection = True self._sync_patch() def update_selection(self, event): if not self._mid_selection or event.inaxes != self._ax: return self._roi.set_range(min(event.ydata, self._xi), max(event.ydata, self._xi)) self._sync_patch() def finalize_selection(self, event): self._mid_selection = False self._patch.set_visible(False) self._draw() def _sync_patch(self): if self._roi.defined(): rng = self._roi.range() self._patch.set_xy((0, rng[0])) self._patch.set_height(rng[1] - rng[0]) self._patch.set_width(1) self._patch.set(**self.plot_opts) self._patch.set_visible(True) else: self._patch.set_visible(False) self._draw()
class MplXRangeROI(AbstractMplRoi): """ Matplotlib ROI for x range selections Parameters ---------- axes : `~matplotlib.axes.Axes` The Matplotlib axes to draw to. """ _roi_cls = XRangeROI def __init__(self, axes): super(MplXRangeROI, self).__init__(axes) self._xi = None self.plot_opts = {'edgecolor': PATCH_COLOR, 'facecolor': PATCH_COLOR, 'alpha': 0.3} trans = blended_transform_factory(self._axes.transData, self._axes.transAxes) self._patch = Rectangle((0., 0.), 1., 1., transform=trans, zorder=100) self._patch.set_visible(False) self._axes.add_patch(self._patch) def start_selection(self, event): if event.inaxes != self._axes: return False if event.key == SCRUBBING_KEY: if not self._roi.defined(): return False elif not self._roi.contains(event.xdata, event.ydata): return False self._store_previous_roi() self._store_background() if event.key == SCRUBBING_KEY: self._scrubbing = True self._dx = event.xdata - self._roi.center() else: self.reset() self._roi.set_range(event.xdata, event.xdata) self._xi = event.xdata self._mid_selection = True self._sync_patch() self._draw() def update_selection(self, event): if not self._mid_selection or event.inaxes != self._axes: return False if event.key == SCRUBBING_KEY: if not self._roi.defined(): return False if self._scrubbing: self._roi.move_to(event.xdata + self._dx) else: self._roi.set_range(min(event.xdata, self._xi), max(event.xdata, self._xi)) self._sync_patch() self._draw() def finalize_selection(self, event): self._scrubbing = False self._mid_selection = False self._patch.set_visible(False) self._draw() def _sync_patch(self): if self._roi.defined(): rng = self._roi.range() self._patch.set_xy((rng[0], 0)) self._patch.set_width(rng[1] - rng[0]) self._patch.set_height(1) self._patch.set(**self.plot_opts) self._patch.set_visible(True) else: self._patch.set_visible(False)
class MplRectangularROI(AbstractMplRoi): """ Matplotlib ROI for rectangular selections Parameters ---------- axes : `~matplotlib.axes.Axes` The Matplotlib axes to draw to. """ _roi_cls = RectangularROI def __init__(self, axes): super(MplRectangularROI, self).__init__(axes) self._xi = None self._yi = None self.plot_opts = {'edgecolor': PATCH_COLOR, 'facecolor': PATCH_COLOR, 'alpha': 0.3} self._patch = Rectangle((0., 0.), 1., 1., zorder=100) self._patch.set_visible(False) self._axes.add_patch(self._patch) def start_selection(self, event): if event.inaxes != self._axes: return False if event.key == SCRUBBING_KEY: if not self._roi.defined(): return False elif not self._roi.contains(event.xdata, event.ydata): return False self._store_previous_roi() self._store_background() self._xi = event.xdata self._yi = event.ydata if event.key == SCRUBBING_KEY: self._scrubbing = True self._cx, self._cy = self._roi.center() else: self.reset() self._roi.update_limits(event.xdata, event.ydata, event.xdata, event.ydata) self._mid_selection = True self._sync_patch() self._draw() def update_selection(self, event): if not self._mid_selection or event.inaxes != self._axes: return False if event.key == SCRUBBING_KEY: if not self._roi.defined(): return False if self._scrubbing: self._roi.move_to(self._cx + event.xdata - self._xi, self._cy + event.ydata - self._yi) else: self._roi.update_limits(min(event.xdata, self._xi), min(event.ydata, self._yi), max(event.xdata, self._xi), max(event.ydata, self._yi)) self._sync_patch() self._draw() def finalize_selection(self, event): self._scrubbing = False self._mid_selection = False self._patch.set_visible(False) self._draw() def _sync_patch(self): if self._roi.defined(): corner = self._roi.corner() width = self._roi.width() height = self._roi.height() self._patch.set_xy(corner) self._patch.set_width(width) self._patch.set_height(height) self._patch.set(**self.plot_opts) self._patch.set_visible(True) else: self._patch.set_visible(False) def __str__(self): return "MPL Rectangle: %s" % self._patch
class MplXRangeROI(AbstractMplRoi): def __init__(self, axes): """ :param axes: A matplotlib Axes object to attach the graphical ROI to """ AbstractMplRoi.__init__(self, axes) self._xi = None self.plot_opts = { 'edgecolor': PATCH_COLOR, 'facecolor': PATCH_COLOR, 'alpha': 0.3 } trans = blended_transform_factory(self._axes.transData, self._axes.transAxes) self._patch = Rectangle((0., 0.), 1., 1., transform=trans) self._patch.set_zorder(100) self._setup_patch() def _setup_patch(self): self._axes.add_patch(self._patch) self._patch.set_visible(False) self._sync_patch() def _roi_factory(self): return XRangeROI() def start_selection(self, event): if event.inaxes != self._axes: return False if event.key == SCRUBBING_KEY: if not self._roi.defined(): return False elif not self._roi.contains(event.xdata, event.ydata): return False self._roi_store() if event.key == SCRUBBING_KEY: self._scrubbing = True self._dx = event.xdata - self._roi.center() else: self.reset() self._roi.set_range(event.xdata, event.xdata) self._xi = event.xdata self._mid_selection = True self._sync_patch() def update_selection(self, event): if not self._mid_selection or event.inaxes != self._axes: return False if event.key == SCRUBBING_KEY: if not self._roi.defined(): return False if self._scrubbing: self._roi.move_to(event.xdata + self._dx) else: self._roi.set_range(min(event.xdata, self._xi), max(event.xdata, self._xi)) self._sync_patch() def finalize_selection(self, event): self._scrubbing = False self._mid_selection = False self._patch.set_visible(False) self._draw() def _sync_patch(self): if self._roi.defined(): rng = self._roi.range() self._patch.set_xy((rng[0], 0)) self._patch.set_width(rng[1] - rng[0]) self._patch.set_height(1) self._patch.set(**self.plot_opts) self._patch.set_visible(True) else: self._patch.set_visible(False) self._draw()
class MplRectangularROI(AbstractMplRoi): """ A subclass of RectangularROI that also renders the ROI to a plot *Attributes*: plot_opts: Dictionary instance A dictionary of plot keywords that are passed to the patch representing the ROI. These control the visual properties of the ROI """ def __init__(self, axes): """ :param axes: A matplotlib Axes object to attach the graphical ROI to """ AbstractMplRoi.__init__(self, axes) self._xi = None self._yi = None self.plot_opts = { 'edgecolor': PATCH_COLOR, 'facecolor': PATCH_COLOR, 'alpha': 0.3 } self._patch = Rectangle((0., 0.), 1., 1.) self._patch.set_zorder(100) self._setup_patch() def _setup_patch(self): self._axes.add_patch(self._patch) self._patch.set_visible(False) self._sync_patch() def _roi_factory(self): return RectangularROI() def start_selection(self, event): if event.inaxes != self._axes: return False if event.key == SCRUBBING_KEY: if not self._roi.defined(): return False elif not self._roi.contains(event.xdata, event.ydata): return False self._roi_store() self._xi = event.xdata self._yi = event.ydata if event.key == SCRUBBING_KEY: self._scrubbing = True self._cx, self._cy = self._roi.center() else: self.reset() self._roi.update_limits(event.xdata, event.ydata, event.xdata, event.ydata) self._mid_selection = True self._sync_patch() def update_selection(self, event): if not self._mid_selection or event.inaxes != self._axes: return False if event.key == SCRUBBING_KEY: if not self._roi.defined(): return False if self._scrubbing: self._roi.move_to(self._cx + event.xdata - self._xi, self._cy + event.ydata - self._yi) else: self._roi.update_limits(min(event.xdata, self._xi), min(event.ydata, self._yi), max(event.xdata, self._xi), max(event.ydata, self._yi)) self._sync_patch() def finalize_selection(self, event): self._scrubbing = False self._mid_selection = False self._patch.set_visible(False) self._draw() def _sync_patch(self): if self._roi.defined(): corner = self._roi.corner() width = self._roi.width() height = self._roi.height() self._patch.set_xy(corner) self._patch.set_width(width) self._patch.set_height(height) self._patch.set(**self.plot_opts) self._patch.set_visible(True) else: self._patch.set_visible(False) self._draw() def __str__(self): return "MPL Rectangle: %s" % self._patch
class MplXRangeROI(AbstractMplRoi): def __init__(self, axes): """ :param axes: A matplotlib Axes object to attach the graphical ROI to """ AbstractMplRoi.__init__(self, axes) self._xi = None self.plot_opts = {'edgecolor': PATCH_COLOR, 'facecolor': PATCH_COLOR, 'alpha': 0.3} trans = blended_transform_factory(self._axes.transData, self._axes.transAxes) self._patch = Rectangle((0., 0.), 1., 1., transform=trans) self._patch.set_zorder(100) self._setup_patch() def _setup_patch(self): self._axes.add_patch(self._patch) self._patch.set_visible(False) self._sync_patch() def _roi_factory(self): return XRangeROI() def start_selection(self, event): if event.inaxes != self._axes: return False if event.key == SCRUBBING_KEY: if not self._roi.defined(): return False elif not self._roi.contains(event.xdata, event.ydata): return False self._roi_store() if event.key == SCRUBBING_KEY: self._scrubbing = True self._dx = event.xdata - self._roi.center() else: self.reset() self._roi.set_range(event.xdata, event.xdata) self._xi = event.xdata self._mid_selection = True self._sync_patch() def update_selection(self, event): if not self._mid_selection or event.inaxes != self._axes: return False if event.key == SCRUBBING_KEY: if not self._roi.defined(): return False if self._scrubbing: self._roi.move_to(event.xdata + self._dx) else: self._roi.set_range(min(event.xdata, self._xi), max(event.xdata, self._xi)) self._sync_patch() def finalize_selection(self, event): self._scrubbing = False self._mid_selection = False self._patch.set_visible(False) self._draw() def _sync_patch(self): if self._roi.defined(): rng = self._roi.range() self._patch.set_xy((rng[0], 0)) self._patch.set_width(rng[1] - rng[0]) self._patch.set_height(1) self._patch.set(**self.plot_opts) self._patch.set_visible(True) else: self._patch.set_visible(False) self._draw()
class MplRectangularROI(AbstractMplRoi): """ A subclass of RectangularROI that also renders the ROI to a plot *Attributes*: plot_opts: Dictionary instance A dictionary of plot keywords that are passed to the patch representing the ROI. These control the visual properties of the ROI """ def __init__(self, axes): """ :param axes: A matplotlib Axes object to attach the graphical ROI to """ AbstractMplRoi.__init__(self, axes) self._xi = None self._yi = None self.plot_opts = {'edgecolor': PATCH_COLOR, 'facecolor': PATCH_COLOR, 'alpha': 0.3} self._patch = Rectangle((0., 0.), 1., 1.) self._patch.set_zorder(100) self._setup_patch() def _setup_patch(self): self._axes.add_patch(self._patch) self._patch.set_visible(False) self._sync_patch() def _roi_factory(self): return RectangularROI() def start_selection(self, event): if event.inaxes != self._axes: return False if event.key == SCRUBBING_KEY: if not self._roi.defined(): return False elif not self._roi.contains(event.xdata, event.ydata): return False self._roi_store() self._xi = event.xdata self._yi = event.ydata if event.key == SCRUBBING_KEY: self._scrubbing = True self._cx, self._cy = self._roi.center() else: self.reset() self._roi.update_limits(event.xdata, event.ydata, event.xdata, event.ydata) self._mid_selection = True self._sync_patch() def update_selection(self, event): if not self._mid_selection or event.inaxes != self._axes: return False if event.key == SCRUBBING_KEY: if not self._roi.defined(): return False if self._scrubbing: self._roi.move_to(self._cx + event.xdata - self._xi, self._cy + event.ydata - self._yi) else: self._roi.update_limits(min(event.xdata, self._xi), min(event.ydata, self._yi), max(event.xdata, self._xi), max(event.ydata, self._yi)) self._sync_patch() def finalize_selection(self, event): self._scrubbing = False self._mid_selection = False self._patch.set_visible(False) self._draw() def _sync_patch(self): if self._roi.defined(): corner = self._roi.corner() width = self._roi.width() height = self._roi.height() self._patch.set_xy(corner) self._patch.set_width(width) self._patch.set_height(height) self._patch.set(**self.plot_opts) self._patch.set_visible(True) else: self._patch.set_visible(False) self._draw() def __str__(self): return "MPL Rectangle: %s" % self._patch
class MplYRangeROI(AbstractMplRoi): """ Matplotlib ROI for y range selections Parameters ---------- axes : `~matplotlib.axes.Axes` The Matplotlib axes to draw to. """ _roi_cls = YRangeROI def __init__(self, axes): super(MplYRangeROI, self).__init__(axes) self._xi = None self.plot_opts = {'edgecolor': PATCH_COLOR, 'facecolor': PATCH_COLOR, 'alpha': 0.3} trans = blended_transform_factory(self._axes.transAxes, self._axes.transData) self._patch = Rectangle((0., 0.), 1., 1., transform=trans, zorder=100) self._patch.set_visible(False) self._axes.add_patch(self._patch) def start_selection(self, event): if event.inaxes != self._axes: return False if event.key == SCRUBBING_KEY: if not self._roi.defined(): return False elif not self._roi.contains(event.xdata, event.ydata): return False self._store_previous_roi() self._store_background() if event.key == SCRUBBING_KEY: self._scrubbing = True self._dy = event.ydata - self._roi.center() else: self.reset() self._roi.set_range(event.ydata, event.ydata) self._xi = event.ydata self._mid_selection = True self._sync_patch() self._draw() def update_selection(self, event): if not self._mid_selection or event.inaxes != self._axes: return False if event.key == SCRUBBING_KEY: if not self._roi.defined(): return False if self._scrubbing: self._roi.move_to(event.ydata + self._dy) else: self._roi.set_range(min(event.ydata, self._xi), max(event.ydata, self._xi)) self._sync_patch() self._draw() def finalize_selection(self, event): self._scrubbing = False self._mid_selection = False self._patch.set_visible(False) self._draw() def _sync_patch(self): if self._roi.defined(): rng = self._roi.range() self._patch.set_xy((0, rng[0])) self._patch.set_height(rng[1] - rng[0]) self._patch.set_width(1) self._patch.set(**self.plot_opts) self._patch.set_visible(True) else: self._patch.set_visible(False)
class MplYRangeROI(AbstractMplRoi): """ Matplotlib ROI for y range selections Parameters ---------- axes : :class:`matplotlib.axes.Axes` The Matplotlib axes to draw to. """ _roi_cls = YRangeROI def __init__(self, axes, data_space=True): super(MplYRangeROI, self).__init__(axes, data_space=data_space) self._yi = None self.plot_opts = { 'edgecolor': PATCH_COLOR, 'facecolor': PATCH_COLOR, 'alpha': 0.3 } if self._data_space: trans = blended_transform_factory(self._axes.transAxes, self._axes.transData) else: trans = self._axes.transAxes self._patch = Rectangle((0., 0.), 1., 1., transform=trans, zorder=100) self._patch.set_visible(False) self._axes.add_patch(self._patch) def start_selection(self, event): if event.inaxes != self._axes: return False if self._data_space: xval = event.xdata yval = event.ydata else: axes_trans = self._axes.transAxes.inverted() xval, yval = axes_trans.transform([event.x, event.y]) if event.key == SCRUBBING_KEY: if not self._roi.defined(): return False elif not self._roi.contains(xval, yval): return False self._store_previous_roi() self._store_background() if event.key == SCRUBBING_KEY: self._scrubbing = True self._dy = yval - self._roi.center() else: self.reset() self._roi.set_range(yval, yval) self._yi = yval self._mid_selection = True self._sync_patch() self._draw() def update_selection(self, event): if not self._mid_selection or event.inaxes != self._axes: return False if event.key == SCRUBBING_KEY: if not self._roi.defined(): return False if self._data_space: yval = event.ydata else: axes_trans = self._axes.transAxes.inverted() _, yval = axes_trans.transform([event.x, event.y]) if self._scrubbing: self._roi.move_to(yval + self._dy) else: self._roi.set_range(min(yval, self._yi), max(yval, self._yi)) self._sync_patch() self._draw() def finalize_selection(self, event): self._scrubbing = False self._mid_selection = False self._patch.set_visible(False) self._draw() def _sync_patch(self): if self._roi.defined(): rng = self._roi.range() self._patch.set_xy((0, rng[0])) self._patch.set_height(rng[1] - rng[0]) self._patch.set_width(1) self._patch.set(**self.plot_opts) self._patch.set_visible(True) else: self._patch.set_visible(False)
] # write text add_interval = Ut.word_or_new_row(image_props_sort[row], col) text = text + selected_label[0] + add_interval #ax_text.cla() text_in_axes.set_text(text) # if this is not the image insert the new image to the dictionary ax_reference.cla() ax_reference.imshow(dictionary_images[selected_label[0]][0]) ax_crop.title.set_text('is this is th right latter ?' + selected_label[0]) # change rectangle color rectangle.set(edgecolor='r') plt.pause(0.01) valid = True # change rectangle color rectangle.set(edgecolor='g') if not valid: latter = str(input('witch letter is it ?')) print(latter) # check if their is such a label if latter in dictionary_images.keys(): dictionary_images[latter].append(image_ocr) else: # create new field dictionary_images.update({latter: [image_ocr]})