def draw(self, renderer): """Draw the :class:`TextCollection` object to the given *renderer*.""" if renderer is not None: self._renderer = renderer if not self.get_visible(): return if not any(self.text): return renderer.open_group('text', self.get_gid()) trans = self.get_transform() if self.offset != (0, 0): scale = self.axes.figure.dpi / 72 xoff, yoff = self.offset trans += mtransforms.Affine2D().translate( scale * xoff, scale * yoff) posx = self.convert_xunits(self.x) posy = self.convert_yunits(self.y) pts = np.vstack((posx, posy)).T pts = trans.transform(pts) canvasw, canvash = renderer.get_canvas_width_height() gc = renderer.new_gc() gc.set_foreground(self.get_color()) gc.set_alpha(self.get_alpha()) gc.set_url(self._url) self._set_gc_clip(gc) angle = self.get_rotation() for (posx, posy), t in zip(pts, self.text): # Skip empty strings--not only is this a performance gain, but it fixes # rendering with path effects below. if not t: continue self._text = t # hack to allow self._get_layout to work bbox, info, descent = self._get_layout(renderer) self._text = '' for line, _, x, y in info: mtext = self if len(info) == 1 else None x = x + posx y = y + posy if renderer.flipy(): y = canvash - y # Can simplify next two lines once support for matplotlib<3.1 is dropped check_line = getattr(self, '_preprocess_math', self.is_math_text) clean_line, ismath = check_line(line) if self.get_path_effects(): from matplotlib.patheffects import PathEffectRenderer textrenderer = PathEffectRenderer( self.get_path_effects(), renderer) # noqa: E126 else: textrenderer = renderer if self.get_usetex(): textrenderer.draw_tex(gc, x, y, clean_line, self._fontproperties, angle, mtext=mtext) else: textrenderer.draw_text(gc, x, y, clean_line, self._fontproperties, angle, ismath=ismath, mtext=mtext) gc.restore() renderer.close_group('text')
def draw(self, renderer): """ Draws the :class:`Text` object to the given *renderer*. """ if renderer is not None: self._renderer = renderer if not self.get_visible(): return if self.text.strip() == '': return renderer.open_group('text', self.gid) bbox, info, descent = self._get_layout(renderer) trans = self.transform # don't use self.get_position here, which refers to text position # in Text, and dash position in TextWithDash: posx = float(self.convert_xunits(self._x)) posy = float(self.convert_yunits(self._y)) posx, posy = trans.transform_point((posx, posy)) canvasw, canvash = renderer.get_canvas_width_height() # draw the FancyBboxPatch if self._bbox_patch: self._draw_bbox(renderer, posx, posy) if self.style == None: self._defaultStyle() if self.style.clip_path is None and self.style.clip_rectangle is None: self._set_gc_clip(self.style) if self._bbox: bbox_artist(self, renderer, self._bbox) angle = self.get_rotation() for line, wh, x, y in info: if not np.isfinite(x) or not np.isfinite(y): continue mtext = self if len(info) == 1 else None x = x + posx y = y + posy if renderer.flipy(): y = canvash - y clean_line, ismath = self.is_math_text(line) if self.get_path_effects(): from matplotlib.patheffects import PathEffectRenderer renderer = PathEffectRenderer(self.get_path_effects(), renderer) if rcParams['text.usetex']: renderer.draw_tex(self.style, x, y, clean_line, self.font, angle, mtext=mtext) else: renderer.draw_text(self.style, x, y, clean_line, self.font, angle, ismath=ismath, mtext=mtext) self.style.restore() renderer.close_group('text')
def draw(self, renderer): """Draw the :class:`TextCollection` object to the given *renderer*.""" if renderer is not None: self._renderer = renderer if not self.get_visible(): return if not any(self.text): return renderer.open_group('text', self.get_gid()) trans = self.get_transform() if self.offset != (0, 0): scale = self.axes.figure.dpi / 72 xoff, yoff = self.offset trans += mtransforms.Affine2D().translate(scale * xoff, scale * yoff) posx = self.convert_xunits(self.x) posy = self.convert_yunits(self.y) pts = np.vstack((posx, posy)).T pts = trans.transform(pts) canvasw, canvash = renderer.get_canvas_width_height() gc = renderer.new_gc() gc.set_foreground(self.get_color()) gc.set_alpha(self.get_alpha()) gc.set_url(self._url) self._set_gc_clip(gc) angle = self.get_rotation() for (posx, posy), t in zip(pts, self.text): # Skip empty strings--not only is this a performance gain, but it fixes # rendering with path effects below. if not t: continue self._text = t # hack to allow self._get_layout to work bbox, info, descent = self._get_layout(renderer) self._text = '' for line, wh, x, y in info: mtext = self if len(info) == 1 else None x = x + posx y = y + posy if renderer.flipy(): y = canvash - y clean_line, ismath = self.is_math_text(line) if self.get_path_effects(): from matplotlib.patheffects import PathEffectRenderer textrenderer = PathEffectRenderer( self.get_path_effects(), renderer) # noqa: E126 else: textrenderer = renderer if self.get_usetex(): textrenderer.draw_tex(gc, x, y, clean_line, self._fontproperties, angle, mtext=mtext) else: textrenderer.draw_text(gc, x, y, clean_line, self._fontproperties, angle, ismath=ismath, mtext=mtext) gc.restore() renderer.close_group('text')
def draw(self, renderer): # docstring inherited if renderer is not None: self._renderer = renderer if not self.get_visible(): return if self.get_text() == '': return renderer.open_group('text', self.get_gid()) with _wrap_text(self) as textobj: bbox, info, descent = textobj._get_layout(renderer) trans = textobj.get_transform() # don't use textobj.get_position here, which refers to text # position in Text: posx = float(textobj.convert_xunits(textobj._x)) posy = float(textobj.convert_yunits(textobj._y)) posx, posy = trans.transform((posx, posy)) if not np.isfinite(posx) or not np.isfinite(posy): # _log.warning("posx and posy should be finite values") return canvasw, canvash = renderer.get_canvas_width_height() # Update the location and size of the bbox # (`.patches.FancyBboxPatch`), and draw it. if textobj._bbox_patch: self.update_bbox_position_size(renderer) self._bbox_patch.draw(renderer) angle = textobj.get_rotation() i = 0 colors = ["black", "red", "blue", "green", "magenta"] for line, wh, x, y in info: fontproperties = textobj._get_chunk_fontproperties(self._chunks[i].fontargs) gc = renderer.new_gc() self._update_gcproperties(gc, self._chunks[i].gcargs) if i == 0: textobj._set_gc_clip(gc) i += 1 mtext = textobj if len(info) == 1 else None x = x + posx y = y + posy if renderer.flipy(): y = canvash - y clean_line, ismath = textobj._preprocess_math(line) if textobj.get_path_effects(): from matplotlib.patheffects import PathEffectRenderer textrenderer = PathEffectRenderer( textobj.get_path_effects(), renderer) else: textrenderer = renderer if textobj.get_usetex(): textrenderer.draw_tex(gc, x, y, clean_line, fontproperties, angle, mtext=mtext) else: textrenderer.draw_text(gc, x, y, clean_line, fontproperties, angle, ismath=ismath, mtext=mtext) gc.restore() renderer.close_group('text') self.stale = False