def draw(self, renderer): # docstring inherited from Artist.draw. if not self.get_visible(): return if self._invalidy or self._invalidx: self.recache() self.ind_offset = 0 # Needed for contains() method. if self._subslice and self.axes: x0, x1 = self.axes.get_xbound() i0 = self._x_filled.searchsorted(x0, 'left') i1 = self._x_filled.searchsorted(x1, 'right') subslice = slice(max(i0 - 1, 0), i1 + 1) self.ind_offset = subslice.start self._transform_path(subslice) else: subslice = None if self.get_path_effects(): from matplotlib.patheffects import PathEffectRenderer renderer = PathEffectRenderer(self.get_path_effects(), renderer) renderer.open_group('line2d', self.get_gid()) if self._lineStyles[self._linestyle] != '_draw_nothing': tpath, affine = ( self._get_transformed_path().get_transformed_path_and_affine()) if len(tpath.vertices): gc = renderer.new_gc() self._set_gc_clip(gc) lc_rgba = mcolors.to_rgba(self._color, self._alpha) gc.set_foreground(lc_rgba, isRGBA=True) gc.set_antialiased(self._antialiased) gc.set_linewidth(self._linewidth) if self.is_dashed(): cap = self._dashcapstyle join = self._dashjoinstyle else: cap = self._solidcapstyle join = self._solidjoinstyle gc.set_joinstyle(join) gc.set_capstyle(cap) gc.set_snap(self.get_snap()) if self.get_sketch_params() is not None: gc.set_sketch_params(*self.get_sketch_params()) gc.set_dashes(self._dashOffset, self._dashSeq) renderer.draw_path(gc, tpath, affine.frozen()) gc.restore() if self._marker and self._markersize > 0: gc = renderer.new_gc() self._set_gc_clip(gc) gc.set_linewidth(self._markeredgewidth) gc.set_antialiased(self._antialiased) ec_rgba = mcolors.to_rgba(self.get_markeredgecolor(), self._alpha) fc_rgba = mcolors.to_rgba(self._get_markerfacecolor(), self._alpha) fcalt_rgba = mcolors.to_rgba(self._get_markerfacecolor(alt=True), self._alpha) # If the edgecolor is "auto", it is set according to the *line* # color but inherits the alpha value of the *face* color, if any. if (cbook._str_equal(self._markeredgecolor, "auto") and not cbook._str_lower_equal(self.get_markerfacecolor(), "none")): ec_rgba = ec_rgba[:3] + (fc_rgba[3], ) gc.set_foreground(ec_rgba, isRGBA=True) if self.get_sketch_params() is not None: scale, length, randomness = self.get_sketch_params() gc.set_sketch_params(scale / 2, length / 2, 2 * randomness) marker = self._marker # Markers *must* be drawn ignoring the drawstyle (but don't pay the # recaching if drawstyle is already "default"). if self.get_drawstyle() != "default": with cbook._setattr_cm(self, _drawstyle="default", _transformed_path=None): self.recache() self._transform_path(subslice) tpath, affine = (self._get_transformed_path(). get_transformed_points_and_affine()) else: tpath, affine = (self._get_transformed_path(). get_transformed_points_and_affine()) if len(tpath.vertices): # subsample the markers if markevery is not None markevery = self.get_markevery() if markevery is not None: subsampled = _mark_every_path(markevery, tpath, affine, self.axes.transAxes) else: subsampled = tpath snap = marker.get_snap_threshold() if isinstance(snap, Real): snap = renderer.points_to_pixels(self._markersize) >= snap gc.set_snap(snap) gc.set_joinstyle(marker.get_joinstyle()) gc.set_capstyle(marker.get_capstyle()) marker_path = marker.get_path() marker_trans = marker.get_transform() w = renderer.points_to_pixels(self._markersize) if cbook._str_equal(marker.get_marker(), ","): gc.set_linewidth(0) else: # Don't scale for pixels, and don't stroke them marker_trans = marker_trans.scale(w) renderer.draw_markers(gc, marker_path, marker_trans, subsampled, affine.frozen(), fc_rgba) alt_marker_path = marker.get_alt_path() if alt_marker_path: alt_marker_trans = marker.get_alt_transform() alt_marker_trans = alt_marker_trans.scale(w) renderer.draw_markers(gc, alt_marker_path, alt_marker_trans, subsampled, affine.frozen(), fcalt_rgba) gc.restore() renderer.close_group('line2d') self.stale = False
def draw(self, renderer): """draw the Line with `renderer` unless visibility is False""" if not self.get_visible(): return if self._invalidy or self._invalidx: self.recache() self.ind_offset = 0 # Needed for contains() method. if self._subslice and self.axes: x0, x1 = self.axes.get_xbound() i0, = self._x_filled.searchsorted([x0], 'left') i1, = self._x_filled.searchsorted([x1], 'right') subslice = slice(max(i0 - 1, 0), i1 + 1) self.ind_offset = subslice.start self._transform_path(subslice) transf_path = self._get_transformed_path() if self.get_path_effects(): from matplotlib.patheffects import PathEffectRenderer renderer = PathEffectRenderer(self.get_path_effects(), renderer) renderer.open_group('line2d', self.get_gid()) if self._lineStyles[self._linestyle] != '_draw_nothing': tpath, affine = transf_path.get_transformed_path_and_affine() if len(tpath.vertices): gc = renderer.new_gc() self._set_gc_clip(gc) ln_color_rgba = self._get_rgba_ln_color() gc.set_foreground(ln_color_rgba, isRGBA=True) gc.set_alpha(ln_color_rgba[3]) gc.set_antialiased(self._antialiased) gc.set_linewidth(self._linewidth) if self.is_dashed(): cap = self._dashcapstyle join = self._dashjoinstyle else: cap = self._solidcapstyle join = self._solidjoinstyle gc.set_joinstyle(join) gc.set_capstyle(cap) gc.set_snap(self.get_snap()) if self.get_sketch_params() is not None: gc.set_sketch_params(*self.get_sketch_params()) gc.set_dashes(self._dashOffset, self._dashSeq) renderer.draw_path(gc, tpath, affine.frozen()) gc.restore() if self._marker and self._markersize > 0: gc = renderer.new_gc() self._set_gc_clip(gc) rgbaFace = self._get_rgba_face() rgbaFaceAlt = self._get_rgba_face(alt=True) edgecolor = self.get_markeredgecolor() if (isinstance(edgecolor, six.string_types) and edgecolor.lower() == 'none'): gc.set_linewidth(0) gc.set_foreground(rgbaFace, isRGBA=True) else: gc.set_foreground(edgecolor) gc.set_linewidth(self._markeredgewidth) mec = self._markeredgecolor if (isinstance(mec, six.string_types) and mec == 'auto' and rgbaFace is not None): gc.set_alpha(rgbaFace[3]) else: gc.set_alpha(self.get_alpha()) marker = self._marker tpath, affine = transf_path.get_transformed_points_and_affine() if len(tpath.vertices): # subsample the markers if markevery is not None markevery = self.get_markevery() if markevery is not None: subsampled = _mark_every_path(markevery, tpath, affine, self.axes.transAxes) else: subsampled = tpath snap = marker.get_snap_threshold() if type(snap) == float: snap = renderer.points_to_pixels(self._markersize) >= snap gc.set_snap(snap) gc.set_joinstyle(marker.get_joinstyle()) gc.set_capstyle(marker.get_capstyle()) marker_path = marker.get_path() marker_trans = marker.get_transform() w = renderer.points_to_pixels(self._markersize) if (isinstance(marker.get_marker(), six.string_types) and marker.get_marker() == ','): gc.set_linewidth(0) else: # Don't scale for pixels, and don't stroke them marker_trans = marker_trans.scale(w) renderer.draw_markers(gc, marker_path, marker_trans, subsampled, affine.frozen(), rgbaFace) alt_marker_path = marker.get_alt_path() if alt_marker_path: alt_marker_trans = marker.get_alt_transform() alt_marker_trans = alt_marker_trans.scale(w) if (isinstance(mec, six.string_types) and mec == 'auto' and rgbaFaceAlt is not None): gc.set_alpha(rgbaFaceAlt[3]) else: gc.set_alpha(self.get_alpha()) renderer.draw_markers( gc, alt_marker_path, alt_marker_trans, subsampled, affine.frozen(), rgbaFaceAlt) gc.restore() renderer.close_group('line2d') self.stale = False
def draw(self, renderer): """draw the Line with `renderer` unless visibility is False""" if not self.get_visible(): return if self._invalidy or self._invalidx: self.recache() self.ind_offset = 0 # Needed for contains() method. if self._subslice and self.axes: x0, x1 = self.axes.get_xbound() i0, = self._x_filled.searchsorted([x0], 'left') i1, = self._x_filled.searchsorted([x1], 'right') subslice = slice(max(i0 - 1, 0), i1 + 1) self.ind_offset = subslice.start self._transform_path(subslice) else: subslice = None if self.get_path_effects(): from matplotlib.patheffects import PathEffectRenderer renderer = PathEffectRenderer(self.get_path_effects(), renderer) renderer.open_group('line2d', self.get_gid()) if self._lineStyles[self._linestyle] != '_draw_nothing': tpath, affine = (self._get_transformed_path() .get_transformed_path_and_affine()) if len(tpath.vertices): gc = renderer.new_gc() self._set_gc_clip(gc) lc_rgba = mcolors.to_rgba(self._color, self._alpha) gc.set_foreground(lc_rgba, isRGBA=True) gc.set_antialiased(self._antialiased) gc.set_linewidth(self._linewidth) if self.is_dashed(): cap = self._dashcapstyle join = self._dashjoinstyle else: cap = self._solidcapstyle join = self._solidjoinstyle gc.set_joinstyle(join) gc.set_capstyle(cap) gc.set_snap(self.get_snap()) if self.get_sketch_params() is not None: gc.set_sketch_params(*self.get_sketch_params()) gc.set_dashes(self._dashOffset, self._dashSeq) renderer.draw_path(gc, tpath, affine.frozen()) gc.restore() if self._marker and self._markersize > 0: gc = renderer.new_gc() self._set_gc_clip(gc) gc.set_linewidth(self._markeredgewidth) gc.set_antialiased(self._antialiased) ec_rgba = mcolors.to_rgba( self.get_markeredgecolor(), self._alpha) fc_rgba = mcolors.to_rgba( self._get_markerfacecolor(), self._alpha) fcalt_rgba = mcolors.to_rgba( self._get_markerfacecolor(alt=True), self._alpha) # If the edgecolor is "auto", it is set according to the *line* # color but inherits the alpha value of the *face* color, if any. if (cbook._str_equal(self._markeredgecolor, "auto") and not cbook._str_lower_equal( self.get_markerfacecolor(), "none")): ec_rgba = ec_rgba[:3] + (fc_rgba[3],) gc.set_foreground(ec_rgba, isRGBA=True) marker = self._marker # Markers *must* be drawn ignoring the drawstyle (but don't pay the # recaching if drawstyle is already "default"). if self.get_drawstyle() != "default": with cbook._setattr_cm( self, _drawstyle="default", _transformed_path=None): self.recache() self._transform_path(subslice) tpath, affine = (self._get_transformed_path() .get_transformed_path_and_affine()) else: tpath, affine = (self._get_transformed_path() .get_transformed_path_and_affine()) if len(tpath.vertices): # subsample the markers if markevery is not None markevery = self.get_markevery() if markevery is not None: subsampled = _mark_every_path(markevery, tpath, affine, self.axes.transAxes) else: subsampled = tpath snap = marker.get_snap_threshold() if type(snap) == float: snap = renderer.points_to_pixels(self._markersize) >= snap gc.set_snap(snap) gc.set_joinstyle(marker.get_joinstyle()) gc.set_capstyle(marker.get_capstyle()) marker_path = marker.get_path() marker_trans = marker.get_transform() w = renderer.points_to_pixels(self._markersize) if cbook._str_equal(marker.get_marker(), ","): gc.set_linewidth(0) else: # Don't scale for pixels, and don't stroke them marker_trans = marker_trans.scale(w) renderer.draw_markers(gc, marker_path, marker_trans, subsampled, affine.frozen(), fc_rgba) alt_marker_path = marker.get_alt_path() if alt_marker_path: alt_marker_trans = marker.get_alt_transform() alt_marker_trans = alt_marker_trans.scale(w) renderer.draw_markers( gc, alt_marker_path, alt_marker_trans, subsampled, affine.frozen(), fcalt_rgba) gc.restore() renderer.close_group('line2d') self.stale = False
def draw(self, renderer): """draw the Line with `renderer` unless visibility is False""" if not self.get_visible(): return if self._invalidy or self._invalidx: self.recache() self.ind_offset = 0 # Needed for contains() method. if self._subslice and self.axes: x0, x1 = self.axes.get_xbound() i0, = self._x_filled.searchsorted([x0], 'left') i1, = self._x_filled.searchsorted([x1], 'right') subslice = slice(max(i0 - 1, 0), i1 + 1) self.ind_offset = subslice.start self._transform_path(subslice) transf_path = self._get_transformed_path() if self.get_path_effects(): from matplotlib.patheffects import PathEffectRenderer renderer = PathEffectRenderer(self.get_path_effects(), renderer) renderer.open_group('line2d', self.get_gid()) if self._lineStyles[self._linestyle] != '_draw_nothing': tpath, affine = transf_path.get_transformed_path_and_affine() if len(tpath.vertices): gc = renderer.new_gc() self._set_gc_clip(gc) ln_color_rgba = self._get_rgba_ln_color() gc.set_foreground(ln_color_rgba, isRGBA=True) gc.set_alpha(ln_color_rgba[3]) gc.set_antialiased(self._antialiased) gc.set_linewidth(self._linewidth) if self.is_dashed(): cap = self._dashcapstyle join = self._dashjoinstyle else: cap = self._solidcapstyle join = self._solidjoinstyle gc.set_joinstyle(join) gc.set_capstyle(cap) gc.set_snap(self.get_snap()) if self.get_sketch_params() is not None: gc.set_sketch_params(*self.get_sketch_params()) gc.set_dashes(self._dashOffset, self._dashSeq) renderer.draw_path(gc, tpath, affine.frozen()) gc.restore() if self._marker and self._markersize > 0: gc = renderer.new_gc() self._set_gc_clip(gc) rgbaFace = self._get_rgba_face() rgbaFaceAlt = self._get_rgba_face(alt=True) edgecolor = self.get_markeredgecolor() if cbook._str_lower_equal(edgecolor, "none"): gc.set_linewidth(0) gc.set_foreground(rgbaFace, isRGBA=True) else: gc.set_foreground(edgecolor) gc.set_linewidth(self._markeredgewidth) mec = self._markeredgecolor if (cbook._str_equal(mec, "auto") and not cbook._str_lower_equal( self.get_markerfacecolor(), "none")): gc.set_alpha(rgbaFace[3]) else: gc.set_alpha(self.get_alpha()) marker = self._marker tpath, affine = transf_path.get_transformed_points_and_affine() if len(tpath.vertices): # subsample the markers if markevery is not None markevery = self.get_markevery() if markevery is not None: subsampled = _mark_every_path(markevery, tpath, affine, self.axes.transAxes) else: subsampled = tpath snap = marker.get_snap_threshold() if type(snap) == float: snap = renderer.points_to_pixels(self._markersize) >= snap gc.set_snap(snap) gc.set_joinstyle(marker.get_joinstyle()) gc.set_capstyle(marker.get_capstyle()) marker_path = marker.get_path() marker_trans = marker.get_transform() w = renderer.points_to_pixels(self._markersize) if cbook._str_equal(marker.get_marker(), ","): gc.set_linewidth(0) else: # Don't scale for pixels, and don't stroke them marker_trans = marker_trans.scale(w) renderer.draw_markers(gc, marker_path, marker_trans, subsampled, affine.frozen(), rgbaFace) alt_marker_path = marker.get_alt_path() if alt_marker_path: alt_marker_trans = marker.get_alt_transform() alt_marker_trans = alt_marker_trans.scale(w) if (cbook._str_equal(mec, "auto") and not cbook._str_lower_equal( self.get_markerfacecoloralt(), "none")): gc.set_alpha(rgbaFaceAlt[3]) else: gc.set_alpha(self.get_alpha()) renderer.draw_markers(gc, alt_marker_path, alt_marker_trans, subsampled, affine.frozen(), rgbaFaceAlt) gc.restore() renderer.close_group('line2d') self.stale = False
def draw(self, renderer): 'Draw the :class:`Patch` to the given *renderer*.' if not self.get_visible(): return renderer.open_group('patch', self.get_gid()) gc = renderer.new_gc() gc.set_foreground(self._edgecolor, isRGBA=True) lw = self._linewidth if self._edgecolor[3] == 0: lw = 0 gc.set_linewidth(lw) gc.set_linestyle(self._linestyle) gc.set_capstyle(self._capstyle) gc.set_joinstyle(self._joinstyle) gc.set_antialiased(self._antialiased) self._set_gc_clip(gc) gc.set_url(self._url) gc.set_snap(self.get_snap()) rgbFace = self._facecolor if rgbFace[3] == 0: rgbFace = None # (some?) renderers expect this as no-fill signal gc.set_alpha(self._alpha) if self._hatch: gc.set_hatch(self._hatch) if self.get_sketch_params() is not None: gc.set_sketch_params(*self.get_sketch_params()) # path = self.get_path() verts = [ (0.0, 0.0), # left, bottom (1.0, 0.0), # left, top (1.0, 1.0), # right, top (0.0, 1.0), # right, bottom (0.0, 0.0), # ignored ] codes = [Path.MOVETO, Path.LINETO, Path.MOVETO, Path.LINETO, Path.CLOSEPOLY, ] path = Path(verts, codes) transform = self.get_transform() tpath = transform.transform_path_non_affine(path) affine = transform.get_affine() if self.get_path_effects(): from matplotlib.patheffects import PathEffectRenderer renderer = PathEffectRenderer(self.get_path_effects(), renderer) renderer.draw_path(gc, tpath, affine, rgbFace) gc.restore() renderer.close_group('patch') # position the text self._set_text_position(renderer) self._text.draw(renderer)