From: <lee...@us...> - 2010-01-29 16:22:58
|
Revision: 8102 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8102&view=rev Author: leejjoon Date: 2010-01-29 16:22:51 +0000 (Fri, 29 Jan 2010) Log Message: ----------- fix some issues in the bbox after the postscript distiller is run Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/backends/backend_ps.py trunk/matplotlib/lib/matplotlib/font_manager.py Modified: trunk/matplotlib/lib/matplotlib/backends/backend_ps.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_ps.py 2010-01-29 15:27:54 UTC (rev 8101) +++ trunk/matplotlib/lib/matplotlib/backends/backend_ps.py 2010-01-29 16:22:51 UTC (rev 8102) @@ -1383,14 +1383,17 @@ This yields smaller files without illegal encapsulated postscript operators. The output is low-level, converting text to outlines. """ - paper = '-sPAPERSIZE=%s'% ptype + + paper_option = "-sPAPERSIZE=%s" % ptype + psfile = tmpfile + '.ps' outfile = tmpfile + '.output' dpi = rcParams['ps.distiller.res'] if sys.platform == 'win32': gs_exe = 'gswin32c' else: gs_exe = 'gs' + command = '%s -dBATCH -dNOPAUSE -r%d -sDEVICE=pswrite %s -sOutputFile="%s" \ - "%s" > "%s"'% (gs_exe, dpi, paper, psfile, tmpfile, outfile) + "%s" > "%s"'% (gs_exe, dpi, paper_option, psfile, tmpfile, outfile) verbose.report(command, 'debug') exit_status = os.system(command) fh = file(outfile) @@ -1403,14 +1406,14 @@ shutil.move(psfile, tmpfile) + # While it is best if above steps preserve the original bounding + # box, it does not seems to be the case. pstoeps not only convert + # the input to eps format, but also restores the original bbox. - # Since the the paper size is set to the figure size for eps - # output (in '_print_figure_tex'), pstoeps call is not required. + if eps: + pstoeps(tmpfile, bbox) - #if eps: - # pstoeps(tmpfile, bbox) - def xpdf_distill(tmpfile, eps=False, ptype='letter', bbox=None): """ Use ghostscript's ps2pdf and xpdf's/poppler's pdftops to distill a file. @@ -1421,9 +1424,13 @@ pdffile = tmpfile + '.pdf' psfile = tmpfile + '.ps' outfile = tmpfile + '.output' + + if eps: paper_option = "-dEPSCrop" + else: paper_option = "-sPAPERSIZE=%s" % ptype + command = 'ps2pdf -dAutoFilterColorImages=false \ --sColorImageFilter=FlateEncode -sPAPERSIZE=%s "%s" "%s" > "%s"'% \ -(ptype, tmpfile, pdffile, outfile) +-sColorImageFilter=FlateEncode %s "%s" "%s" > "%s"'% \ +(paper_option, tmpfile, pdffile, outfile) if sys.platform == 'win32': command = command.replace('=', '#') verbose.report(command, 'debug') exit_status = os.system(command) @@ -1445,17 +1452,37 @@ os.remove(outfile) os.remove(tmpfile) shutil.move(psfile, tmpfile) + + + # Similar to the gs_distillier case, ps2pdf does not seem to + # preserve the bbox of the original file (at least w/ gs + # 8.61). Thus, the original bbox need to be resotred. + if eps: pstoeps(tmpfile, bbox) for fname in glob.glob(tmpfile+'.*'): os.remove(fname) +def get_bbox_header(l, b, r, t): + """ + return a postscript header stringfor the given bbox (l, b, r, t) + """ + + bbox_info = '%%%%BoundingBox: %d %d %d %d' % (l, b, npy.ceil(r), npy.ceil(t)) + hires_bbox_info = '%%%%HiResBoundingBox: %.6f %.6f %.6f %.6f' % (l, b, r, t) + + return '\n'.join([bbox_info, hires_bbox_info]) + + +# get_bbox is deprecated. I don't see any reason to use ghostscript to +# find the bounding box, as the required bounding box is alread known. def get_bbox(tmpfile, bbox): """ Use ghostscript's bbox device to find the center of the bounding box. Return an appropriately sized bbox centered around that point. A bit of a hack. """ + outfile = tmpfile + '.output' if sys.platform == 'win32': gs_exe = 'gswin32c' else: gs_exe = 'gs' @@ -1497,7 +1524,7 @@ """ Convert the postscript to encapsulated postscript. """ - bbox_info = get_bbox(tmpfile, bbox) + bbox_info = get_bbox_header(*bbox) epsfile = tmpfile + '.eps' epsh = file(epsfile, 'w') @@ -1552,6 +1579,7 @@ shutil.move(epsfile, tmpfile) + class FigureManagerPS(FigureManagerBase): pass Modified: trunk/matplotlib/lib/matplotlib/font_manager.py =================================================================== --- trunk/matplotlib/lib/matplotlib/font_manager.py 2010-01-29 15:27:54 UTC (rev 8101) +++ trunk/matplotlib/lib/matplotlib/font_manager.py 2010-01-29 16:22:51 UTC (rev 8102) @@ -1204,7 +1204,6 @@ for font in fontlist: if (directory is not None and os.path.commonprefix([font.fname, directory]) != directory): - print directory, font.fname, os.path.commonprefix([font.fname, directory]) continue # Matching family should have highest priority, so it is multiplied # by 10.0 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lee...@us...> - 2010-02-03 19:42:06
|
Revision: 8108 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8108&view=rev Author: leejjoon Date: 2010-02-03 19:41:53 +0000 (Wed, 03 Feb 2010) Log Message: ----------- make backends registerable Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/backend_bases.py trunk/matplotlib/lib/matplotlib/tight_bbox.py Modified: trunk/matplotlib/lib/matplotlib/backend_bases.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backend_bases.py 2010-02-03 17:56:03 UTC (rev 8107) +++ trunk/matplotlib/lib/matplotlib/backend_bases.py 2010-02-03 19:41:53 UTC (rev 8108) @@ -40,6 +40,15 @@ import matplotlib.textpath as textpath from matplotlib.path import Path + + +_backend_d = {} + +def register_backend(format, backend_class): + _backend_d[format] = backend_class + + + class RendererBase: """An abstract base class to handle drawing/rendering operations. @@ -1518,6 +1527,33 @@ groupings[name].sort() return groupings + + def _get_print_method(self, format): + method_name = 'print_%s' % format + + # check for registered backends + if format in _backend_d: + backend_class = _backend_d[format] + + def _print_method(*args, **kwargs): + backend = self.switch_backends(backend_class) + print_method = getattr(backend, method_name) + return print_method(*args, **kwargs) + + return _print_method + + if (format not in self.filetypes or + not hasattr(self, method_name)): + formats = self.filetypes.keys() + formats.sort() + raise ValueError( + 'Format "%s" is not supported.\n' + 'Supported formats: ' + '%s.' % (format, ', '.join(formats))) + + return getattr(self, method_name) + + def print_figure(self, filename, dpi=None, facecolor='w', edgecolor='w', orientation='portrait', format=None, **kwargs): """ @@ -1573,16 +1609,8 @@ filename = filename.rstrip('.') + '.' + format format = format.lower() - method_name = 'print_%s' % format - if (format not in self.filetypes or - not hasattr(self, method_name)): - formats = self.filetypes.keys() - formats.sort() - raise ValueError( - 'Format "%s" is not supported.\n' - 'Supported formats: ' - '%s.' % (format, ', '.join(formats))) - + print_method = self._get_print_method(format) + if dpi is None: dpi = rcParams['savefig.dpi'] @@ -1609,7 +1637,8 @@ # the backend to support file-like object, i'm going # to leave it as it is. However, a better solution # than stringIO seems to be needed. -JJL - result = getattr(self, method_name)( + #result = getattr(self, method_name)( + result = print_method( cStringIO.StringIO(), dpi=dpi, facecolor=facecolor, @@ -1642,7 +1671,8 @@ _bbox_inches_restore = None try: - result = getattr(self, method_name)( + #result = getattr(self, method_name)( + result = print_method( filename, dpi=dpi, facecolor=facecolor, Modified: trunk/matplotlib/lib/matplotlib/tight_bbox.py =================================================================== --- trunk/matplotlib/lib/matplotlib/tight_bbox.py 2010-02-03 17:56:03 UTC (rev 8107) +++ trunk/matplotlib/lib/matplotlib/tight_bbox.py 2010-02-03 19:41:53 UTC (rev 8108) @@ -6,6 +6,7 @@ from matplotlib.transforms import Bbox, TransformedBbox, Affine2D + def adjust_bbox(fig, format, bbox_inches): """ Temporarily adjust the figure so that only the specified area @@ -46,12 +47,10 @@ fig.transFigure.invalidate() fig.patch.set_bounds(0, 0, 1, 1) - if format in ["png", "raw", "rgba"]: - adjust_bbox_png(fig, bbox_inches) + adjust_bbox_handler = _adjust_bbox_handler_d.get(format) + if adjust_bbox_handler is not None: + adjust_bbox_handler(fig, bbox_inches) return restore_bbox - elif format in ["pdf", "eps", "svg", "svgz"]: - adjust_bbox_pdf(fig, bbox_inches) - return restore_bbox else: warnings.warn("bbox_inches option for %s backend is not implemented yet." % (format)) return None @@ -125,3 +124,8 @@ return bbox_inches, r +_adjust_bbox_handler_d = {} +for format in ["png", "raw", "rgba"]: + _adjust_bbox_handler_d[format] = adjust_bbox_png +for format in ["pdf", "eps", "svg", "svgz"]: + _adjust_bbox_handler_d[format] = adjust_bbox_pdf This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <md...@us...> - 2010-02-18 14:54:36
|
Revision: 8141 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8141&view=rev Author: mdehoon Date: 2010-02-18 14:54:30 +0000 (Thu, 18 Feb 2010) Log Message: ----------- Make the save_figure methods consistent with the base class signature. Fix a call to save_figure in backend_bases.py. This bug caused the keypress_demo.py example to fail on all backends except those based on GTK. The bug was reported by David Arnold on the mailing list on February 14, 2010. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/backend_bases.py trunk/matplotlib/lib/matplotlib/backends/backend_gtk.py trunk/matplotlib/lib/matplotlib/backends/backend_macosx.py trunk/matplotlib/lib/matplotlib/backends/backend_qt.py trunk/matplotlib/lib/matplotlib/backends/backend_qt4.py trunk/matplotlib/lib/matplotlib/backends/backend_tkagg.py Modified: trunk/matplotlib/lib/matplotlib/backend_bases.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backend_bases.py 2010-02-17 15:25:38 UTC (rev 8140) +++ trunk/matplotlib/lib/matplotlib/backend_bases.py 2010-02-18 14:54:30 UTC (rev 8141) @@ -1923,7 +1923,7 @@ self.canvas.toolbar.zoom() # saving current figure (default key 's') elif event.key in save_keys: - self.canvas.toolbar.save_figure(self.canvas.toolbar) + self.canvas.toolbar.save_figure() if event.inaxes is None: return Modified: trunk/matplotlib/lib/matplotlib/backends/backend_gtk.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_gtk.py 2010-02-17 15:25:38 UTC (rev 8140) +++ trunk/matplotlib/lib/matplotlib/backends/backend_gtk.py 2010-02-18 14:54:30 UTC (rev 8141) @@ -653,7 +653,7 @@ filetypes=self.canvas.get_supported_filetypes(), default_filetype=self.canvas.get_default_filetype()) - def save_figure(self, button): + def save_figure(self, *args): fname, format = self.get_filechooser().get_filename_from_user() if fname: try: @@ -908,7 +908,7 @@ filetypes=self.canvas.get_supported_filetypes(), default_filetype=self.canvas.get_default_filetype()) - def save_figure(self, button): + def save_figure(self, *args): fname, format = self.get_filechooser().get_filename_from_user() if fname: try: Modified: trunk/matplotlib/lib/matplotlib/backends/backend_macosx.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_macosx.py 2010-02-17 15:25:38 UTC (rev 8140) +++ trunk/matplotlib/lib/matplotlib/backends/backend_macosx.py 2010-02-18 14:54:30 UTC (rev 8141) @@ -392,7 +392,7 @@ axes[i].yaxis.zoom(direction) self.canvas.invalidate() - def save_figure(self): + def save_figure(self, *args): filename = _macosx.choose_save_file('Save the figure') if filename is None: # Cancel return @@ -416,7 +416,7 @@ def set_cursor(self, cursor): _macosx.set_cursor(cursor) - def save_figure(self): + def save_figure(self, *args): filename = _macosx.choose_save_file('Save the figure') if filename is None: # Cancel return Modified: trunk/matplotlib/lib/matplotlib/backends/backend_qt.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_qt.py 2010-02-17 15:25:38 UTC (rev 8140) +++ trunk/matplotlib/lib/matplotlib/backends/backend_qt.py 2010-02-18 14:54:30 UTC (rev 8141) @@ -422,7 +422,7 @@ def _get_canvas(self, fig): return FigureCanvasQT(fig) - def save_figure( self ): + def save_figure(self, *args): filetypes = self.canvas.get_supported_filetypes_grouped() sorted_filetypes = filetypes.items() sorted_filetypes.sort() Modified: trunk/matplotlib/lib/matplotlib/backends/backend_qt4.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_qt4.py 2010-02-17 15:25:38 UTC (rev 8140) +++ trunk/matplotlib/lib/matplotlib/backends/backend_qt4.py 2010-02-18 14:54:30 UTC (rev 8141) @@ -431,7 +431,7 @@ def _get_canvas(self, fig): return FigureCanvasQT(fig) - def save_figure( self ): + def save_figure(self, *args): filetypes = self.canvas.get_supported_filetypes_grouped() sorted_filetypes = filetypes.items() sorted_filetypes.sort() Modified: trunk/matplotlib/lib/matplotlib/backends/backend_tkagg.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_tkagg.py 2010-02-17 15:25:38 UTC (rev 8140) +++ trunk/matplotlib/lib/matplotlib/backends/backend_tkagg.py 2010-02-18 14:54:30 UTC (rev 8141) @@ -576,7 +576,7 @@ a.yaxis.zoom(direction) self.canvas.draw() - def save_figure(self): + def save_figure(self, *args): fs = FileDialog.SaveFileDialog(master=self.window, title='Save the figure') try: @@ -703,7 +703,7 @@ canvas.show() canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1) - def save_figure(self): + def save_figure(self, *args): from tkFileDialog import asksaveasfilename from tkMessageBox import showerror filetypes = self.canvas.get_supported_filetypes().copy() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jd...@us...> - 2010-03-03 21:33:42
|
Revision: 8177 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8177&view=rev Author: jdh2358 Date: 2010-03-03 21:33:35 +0000 (Wed, 03 Mar 2010) Log Message: ----------- fix hexbin bins=log bug Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/axes.py trunk/matplotlib/lib/matplotlib/ticker.py Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2010-03-03 21:06:01 UTC (rev 8176) +++ trunk/matplotlib/lib/matplotlib/axes.py 2010-03-03 21:33:35 UTC (rev 8177) @@ -69,12 +69,12 @@ except ValueError: return linestyle, marker, color # Yes else: - if fmt != fmtint: - # user definitely doesn't want tri_down marker + if fmt != fmtint: + # user definitely doesn't want tri_down marker return linestyle, marker, color # Yes else: # ignore converted color - color = None + color = None except ValueError: pass # No, not just a color. @@ -5773,18 +5773,16 @@ if (accum==0).any(): # make sure we have not zeros accum += 1 - - # Transform accum if needed - if bins=='log': - accum = np.log10(accum+1) - # autoscale the norm with curren accum values if it hasn't # been set if norm is not None: if norm.vmin is None and norm.vmax is None: norm.autoscale(accum) - + + # Transform accum if needed + if bins=='log': + accum = np.log10(accum+1) elif bins!=None: if not iterable(bins): minimum, maximum = min(accum), max(accum) Modified: trunk/matplotlib/lib/matplotlib/ticker.py =================================================================== --- trunk/matplotlib/lib/matplotlib/ticker.py 2010-03-03 21:06:01 UTC (rev 8176) +++ trunk/matplotlib/lib/matplotlib/ticker.py 2010-03-03 21:33:35 UTC (rev 8177) @@ -542,9 +542,10 @@ return self.fix_minus(s) def format_data(self, value): + b = self.labelOnlyBase self.labelOnlyBase = False value = cbook.strip_math(self.__call__(value)) - self.labelOnlyBase = True + self.labelOnlyBase = b return value def format_data_short(self,value): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lee...@us...> - 2010-03-12 23:23:56
|
Revision: 8189 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8189&view=rev Author: leejjoon Date: 2010-03-12 23:23:49 +0000 (Fri, 12 Mar 2010) Log Message: ----------- improve legend doc. Thanks to Alan Issac Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/axes.py trunk/matplotlib/lib/matplotlib/legend.py Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2010-03-12 19:27:47 UTC (rev 8188) +++ trunk/matplotlib/lib/matplotlib/axes.py 2010-03-12 23:23:49 UTC (rev 8189) @@ -3964,9 +3964,11 @@ *title* : string the legend title - Padding and spacing between various elements use following keywords - parameters. The dimensions of these values are given as a fraction - of the fontsize. Values from rcParams will be used if None. + Padding and spacing between various elements use following + keywords parameters. These values are measure in font-size + units. E.g., a fontsize of 10 points and a handlelength=5 + implies a handlelength of 50 points. Values from rcParams + will be used if None. ================ ================================================================== Keyword Description Modified: trunk/matplotlib/lib/matplotlib/legend.py =================================================================== --- trunk/matplotlib/lib/matplotlib/legend.py 2010-03-12 19:27:47 UTC (rev 8188) +++ trunk/matplotlib/lib/matplotlib/legend.py 2010-03-12 23:23:49 UTC (rev 8189) @@ -166,9 +166,11 @@ bbox_transform the transform for the bbox. transAxes if None. ================ ================================================================== -The dimensions of pad and spacing are given as a fraction of the -_fontsize. Values from rcParams will be used if None. +The pad and spacing parameters are measure in font-size units. E.g., +a fontsize of 10 points and a handlelength=5 implies a handlelength of +50 points. Values from rcParams will be used if None. + Users can specify any arbitrary location for the legend using the *bbox_to_anchor* keyword argument. bbox_to_anchor can be an instance of BboxBase(or its derivatives) or a tuple of 2 or 4 floats. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lee...@us...> - 2010-04-13 22:55:29
|
Revision: 8227 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8227&view=rev Author: leejjoon Date: 2010-04-13 22:55:23 +0000 (Tue, 13 Apr 2010) Log Message: ----------- fix a bug that _bbox_patch of annotation is not correctly updated Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/offsetbox.py trunk/matplotlib/lib/matplotlib/text.py Modified: trunk/matplotlib/lib/matplotlib/offsetbox.py =================================================================== --- trunk/matplotlib/lib/matplotlib/offsetbox.py 2010-04-06 20:38:31 UTC (rev 8226) +++ trunk/matplotlib/lib/matplotlib/offsetbox.py 2010-04-13 22:55:23 UTC (rev 8227) @@ -159,7 +159,7 @@ if a: return a, b return False, {} - + def set_offset(self, xy): """ Set the offset @@ -1307,11 +1307,10 @@ else: ox0, oy0 = self._get_xy(renderer, x, y, self.textcoords) - #self.offsetbox.set_bbox_to_anchor((ox0, oy0)) w, h, xd, yd = self.offsetbox.get_extent(renderer) _fw, _fh = self._box_alignment - self.offsetbox.set_offset((ox0-_fw*w, oy0-_fh*h)) + self.offsetbox.set_offset((ox0-_fw*w+xd, oy0-_fh*h+yd)) # update patch position bbox = self.offsetbox.get_window_extent(renderer) @@ -1401,7 +1400,7 @@ offset from the point where the mouse drag started. Optionally you may override following two methods. - + def artist_picker(self, artist, evt): return self.ref_artist.contains(evt) @@ -1420,7 +1419,7 @@ self.ref_artist = ref_artist self.got_artist = False self._use_blit = use_blit - + self.canvas = self.ref_artist.figure.canvas c2 = self.canvas.mpl_connect('pick_event', self.on_pick) c3 = self.canvas.mpl_connect('button_release_event', self.on_release) @@ -1484,7 +1483,7 @@ def update_offset(self, dx, dy): pass - + def finalize_offset(self): pass @@ -1504,7 +1503,7 @@ def update_offset(self, dx, dy): loc_in_canvas = self.offsetbox_x + dx, self.offsetbox_y + dy self.offsetbox.set_offset(loc_in_canvas) - + def get_loc_in_canvas(self): offsetbox=self.offsetbox @@ -1514,8 +1513,8 @@ loc_in_canvas = (ox-xd, oy-yd) return loc_in_canvas - + class DraggableAnnotation(DraggableBase): def __init__(self, annotation, use_blit=False): DraggableBase.__init__(self, annotation, use_blit=use_blit) Modified: trunk/matplotlib/lib/matplotlib/text.py =================================================================== --- trunk/matplotlib/lib/matplotlib/text.py 2010-04-06 20:38:31 UTC (rev 8226) +++ trunk/matplotlib/lib/matplotlib/text.py 2010-04-13 22:55:23 UTC (rev 8227) @@ -468,11 +468,6 @@ be updated before actually drawing the bbox. """ - # For arrow_patch, use textbox as patchA by default. - - if not isinstance(self.arrow_patch, FancyArrowPatch): - return - if self._bbox_patch: trans = self.get_transform() @@ -495,32 +490,7 @@ self._bbox_patch.set_mutation_scale(fontsize_in_pixel) #self._bbox_patch.draw(renderer) - else: - props = self._bbox - if props is None: props = {} - props = props.copy() # don't want to alter the pad externally - pad = props.pop('pad', 4) - pad = renderer.points_to_pixels(pad) - if self.get_text() == "": - self.arrow_patch.set_patchA(None) - return - bbox = self.get_window_extent(renderer) - l,b,w,h = bbox.bounds - l-=pad/2. - b-=pad/2. - w+=pad - h+=pad - r = Rectangle(xy=(l,b), - width=w, - height=h, - ) - r.set_transform(mtransforms.IdentityTransform()) - r.set_clip_on( False ) - r.update(props) - - self.arrow_patch.set_patchA(r) - def _draw_bbox(self, renderer, posx, posy): """ Update the location and the size of the bbox @@ -1425,7 +1395,7 @@ x, y = self._artist.transform_point(self._ref_coord) else: raise RuntimeError("unknown type") - + sc = self._get_scale(renderer) tr = Affine2D().scale(sc, sc).translate(x, y) @@ -1501,7 +1471,7 @@ tr = PolarAxes.PolarTransform() trans = tr + self.axes.transData return trans - + s_ = s.split() if len(s_) != 2: raise ValueError("%s is not a recognized coodinate" % s) @@ -1611,8 +1581,8 @@ y = b + y*sc return x, y - + def set_annotation_clip(self, b): """ set *annotation_clip* attribute. @@ -1896,13 +1866,38 @@ mutation_scale = renderer.points_to_pixels(mutation_scale) self.arrow_patch.set_mutation_scale(mutation_scale) - if self._bbox_patch: - patchA = d.pop("patchA", self._bbox_patch) - self.arrow_patch.set_patchA(patchA) + if "patchA" in d: + self.arrow_patch.set_patchA(d.pop("patchA")) else: - patchA = d.pop("patchA", self._bbox) - self.arrow_patch.set_patchA(patchA) + if self._bbox_patch: + self.arrow_patch.set_patchA(self._bbox_patch) + else: + patchA = d.pop("patchA", None) + props = self._bbox + if props is None: props = {} + props = props.copy() # don't want to alter the pad externally + pad = props.pop('pad', 4) + pad = renderer.points_to_pixels(pad) + if self.get_text() == "": + self.arrow_patch.set_patchA(None) + return + bbox = self.get_window_extent(renderer) + l,b,w,h = bbox.bounds + l-=pad/2. + b-=pad/2. + w+=pad + h+=pad + r = Rectangle(xy=(l,b), + width=w, + height=h, + ) + r.set_transform(mtransforms.IdentityTransform()) + r.set_clip_on( False ) + r.update(props) + + self.arrow_patch.set_patchA(r) + else: # pick the x,y corner of the text bbox closest to point @@ -1933,6 +1928,34 @@ self.arrow.set_clip_box(self.get_clip_box()) + def update_bbox_position_size(self, renderer): + """ + Update the location and the size of the bbox. This method + should be used when the position and size of the bbox needs to + be updated before actually drawing the bbox. + """ + + # For arrow_patch, use textbox as patchA by default. + + if not isinstance(self.arrow_patch, FancyArrowPatch): + return + + if self._bbox_patch: + posx, posy = self._x, self._y + print posx, posy + + x_box, y_box, w_box, h_box = _get_textbox(self, renderer) + self._bbox_patch.set_bounds(0., 0., + w_box, h_box) + theta = self.get_rotation()/180.*math.pi + tr = mtransforms.Affine2D().rotate(theta) + tr = tr.translate(posx+x_box, posy+y_box) + self._bbox_patch.set_transform(tr) + fontsize_in_pixel = renderer.points_to_pixels(self.get_size()) + self._bbox_patch.set_mutation_scale(fontsize_in_pixel) + + + @allow_rasterization def draw(self, renderer): """ @@ -1944,14 +1967,13 @@ if not self.get_visible(): return xy_pixel = self._get_position_xy(renderer) - if not self._check_xy(renderer, xy_pixel): return self._update_position_xytext(renderer, xy_pixel) - self.update_bbox_position_size(renderer) + if self.arrow is not None: if self.arrow.figure is None and self.figure is not None: self.arrow.figure = self.figure This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ef...@us...> - 2010-04-15 07:30:50
|
Revision: 8232 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8232&view=rev Author: efiring Date: 2010-04-15 07:30:44 +0000 (Thu, 15 Apr 2010) Log Message: ----------- contour: refactoring by Ian Thomas to facilitate new tricontour functionality Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/axes.py trunk/matplotlib/lib/matplotlib/contour.py Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2010-04-15 07:17:42 UTC (rev 8231) +++ trunk/matplotlib/lib/matplotlib/axes.py 2010-04-15 07:30:44 UTC (rev 8232) @@ -6896,14 +6896,14 @@ def contour(self, *args, **kwargs): if not self._hold: self.cla() kwargs['filled'] = False - return mcontour.ContourSet(self, *args, **kwargs) - contour.__doc__ = mcontour.ContourSet.contour_doc + return mcontour.QuadContourSet(self, *args, **kwargs) + contour.__doc__ = mcontour.QuadContourSet.contour_doc def contourf(self, *args, **kwargs): if not self._hold: self.cla() kwargs['filled'] = True - return mcontour.ContourSet(self, *args, **kwargs) - contourf.__doc__ = mcontour.ContourSet.contour_doc + return mcontour.QuadContourSet(self, *args, **kwargs) + contourf.__doc__ = mcontour.QuadContourSet.contour_doc def clabel(self, CS, *args, **kwargs): return CS.clabel(*args, **kwargs) Modified: trunk/matplotlib/lib/matplotlib/contour.py =================================================================== --- trunk/matplotlib/lib/matplotlib/contour.py 2010-04-15 07:17:42 UTC (rev 8231) +++ trunk/matplotlib/lib/matplotlib/contour.py 2010-04-15 07:30:44 UTC (rev 8232) @@ -577,7 +577,7 @@ class ContourSet(cm.ScalarMappable, ContourLabeler): """ - Create and store a set of contour lines or filled regions. + Store a set of contour lines or filled regions. User-callable method: clabel @@ -592,17 +592,49 @@ same as levels for line contours; half-way between levels for filled contours. See _process_colors method. """ - - def __init__(self, ax, *args, **kwargs): """ Draw contour lines or filled regions, depending on whether keyword arg 'filled' is False (default) or True. - The first argument of the initializer must be an axes - object. The remaining arguments and keyword arguments - are described in ContourSet.contour_doc. + The first three arguments must be: + *ax*: axes object. + + *levels*: [level0, level1, ..., leveln] + A list of floating point numbers indicating the contour + levels. + + *allsegs*: [level0segs, level1segs, ...] + List of all the polygon segments for all the *levels*. + For contour lines len(allsegs) == len(levels), and for + filled contour regions len(allsegs) = len(levels)-1. + + level0segs = [polygon0, polygon1, ...] + + polygon0 = array_like [[x0,y0], [x1,y1], ...] + + *allkinds*: None or [level0kinds, level1kinds, ...] + Optional list of all the polygon vertex kinds (code types), as + described and used in Path. This is used to allow multiply- + connected paths such as holes within filled polygons. + If not None, len(allkinds) == len(allsegs). + + level0kinds = [polygon0kinds, ...] + + polygon0kinds = [vertexcode0, vertexcode1, ...] + + If allkinds is not None, usually all polygons for a particular + contour level are grouped together so that + + level0segs = [polygon0] and level0kinds = [polygon0kinds]. + + Keyword arguments are as described in + :class:`~matplotlib.contour.QuadContourSet` object. + + **Examples:** + + .. plot:: mpl_examples/misc/contour_manual.py """ self.ax = ax self.levels = kwargs.get('levels', None) @@ -638,24 +670,7 @@ raise ValueError('Either colors or cmap must be None') if self.origin == 'image': self.origin = mpl.rcParams['image.origin'] - if isinstance(args[0], ContourSet): - C = args[0].Cntr - if self.levels is None: - self.levels = args[0].levels - else: - x, y, z = self._contour_args(args, kwargs) - - x0 = ma.minimum(x) - x1 = ma.maximum(x) - y0 = ma.minimum(y) - y1 = ma.maximum(y) - self.ax.update_datalim([(x0,y0), (x1,y1)]) - self.ax.autoscale_view() - _mask = ma.getmask(z) - if _mask is ma.nomask: - _mask = None - C = _cntr.Cntr(x, y, z.filled(), _mask) - self.Cntr = C + self._process_args(*args, **kwargs) self._process_levels() if self.colors is not None: @@ -673,28 +688,23 @@ kw['norm'] = norm cm.ScalarMappable.__init__(self, **kw) # sets self.cmap; self._process_colors() + + self.allsegs, self.allkinds = self._get_allsegs_and_allkinds() + if self.filled: if self.linewidths is not None: warnings.warn('linewidths is ignored by contourf') - lowers = self._levels[:-1] - if self.zmin == lowers[0]: - # Include minimum values in lowest interval - lowers = lowers.copy() # so we don't change self._levels - if self.logscale: - lowers[0] = 0.99 * self.zmin - else: - lowers[0] -= 1 - uppers = self._levels[1:] + # Lower and upper contour levels. + lowers, uppers = self._get_lowers_and_uppers() - for level, level_upper in zip(lowers, uppers): - nlist = C.trace(level, level_upper, nchunk = self.nchunk) - nseg = len(nlist)//2 - segs = nlist[:nseg] - kinds = nlist[nseg:] + # Ensure allkinds can be zipped below. + if self.allkinds is None: + self.allkinds = [None]*len(self.allsegs) + for level, level_upper, segs, kinds in \ + zip(lowers, uppers, self.allsegs, self.allkinds): paths = self._make_paths(segs, kinds) - # Default zorder taken from Collection zorder = kwargs.get('zorder', 1) col = collections.PathCollection(paths, @@ -708,12 +718,8 @@ tlinewidths = self._process_linewidths() self.tlinewidths = tlinewidths tlinestyles = self._process_linestyles() - for level, width, lstyle in zip(self.levels, tlinewidths, tlinestyles): - nlist = C.trace(level) - nseg = len(nlist)//2 - segs = nlist[:nseg] - #kinds = nlist[nseg:] - + for level, width, lstyle, segs in \ + zip(self.levels, tlinewidths, tlinestyles, self.allsegs): # Default zorder taken from LineCollection zorder = kwargs.get('zorder', 2) col = collections.LineCollection(segs, @@ -721,20 +727,81 @@ linestyle = lstyle, alpha=self.alpha, zorder=zorder) - col.set_label('_nolegend_') self.ax.add_collection(col, False) self.collections.append(col) self.changed() # set the colors - def _make_paths(self, segs, kinds): - paths = [] - for seg, kind in zip(segs, kinds): - paths.append(mpath.Path(seg, codes=kind)) - return paths + def _process_args(self, *args, **kwargs): + """ + Process args and kwargs; override in derived classes. + Must set self.levels, self.zmin and self.zmax, and update axes + limits. + """ + self.levels = args[0] + self.allsegs = args[1] + self.allkinds = len(args) > 2 and args[2] or None + self.zmax = np.amax(self.levels) + self.zmin = np.amin(self.levels) + self._auto = False + # Check lengths of levels and allsegs. + if self.filled: + if len(self.allsegs) != len(self.levels)-1: + raise ValueError('must be one less number of segments as levels') + else: + if len(self.allsegs) != len(self.levels): + raise ValueError('must be same number of segments as levels') + # Check length of allkinds. + if self.allkinds is not None and len(self.allkinds) != len(self.allsegs): + raise ValueError('allkinds has different length to allsegs') + + # Determine x,y bounds and update axes data limits. + havelimits = False + for segs in self.allsegs: + for seg in segs: + seg = np.asarray(seg) + if havelimits: + min = np.minimum(min, seg.min(axis=0)) + max = np.maximum(max, seg.max(axis=0)) + else: + min = seg.min(axis=0) + max = seg.max(axis=0) + havelimits = True + if havelimits: + self.ax.update_datalim([min, max]) + self.ax.autoscale_view() + + def _get_allsegs_and_allkinds(self): + """ + Override in derived classes to create and return allsegs and allkinds. + allkinds can be None. + """ + return self.allsegs, self.allkinds + + def _get_lowers_and_uppers(self): + """ + Return (lowers,uppers) for filled contours. + """ + lowers = self._levels[:-1] + if self.zmin == lowers[0]: + # Include minimum values in lowest interval + lowers = lowers.copy() # so we don't change self._levels + if self.logscale: + lowers[0] = 0.99 * self.zmin + else: + lowers[0] -= 1 + uppers = self._levels[1:] + return (lowers, uppers) + + def _make_paths(self, segs, kinds): + if kinds is not None: + return [mpath.Path(seg,codes=kind) for seg,kind in zip(segs,kinds)] + else: + return [mpath.Path(seg) for seg in segs] + def changed(self): tcolors = [ (tuple(rgba),) for rgba in self.to_rgba(self.cvalues, alpha=self.alpha)] @@ -750,7 +817,6 @@ # add label colors cm.ScalarMappable.changed(self) - def _autolev(self, z, N): ''' Select contour levels to span the data. @@ -778,101 +844,18 @@ # For line contours, drop levels outside the data range. return lev[(lev > zmin) & (lev < zmax)] - def _initialize_x_y(self, z): - ''' - Return X, Y arrays such that contour(Z) will match imshow(Z) - if origin is not None. - The center of pixel Z[i,j] depends on origin: - if origin is None, x = j, y = i; - if origin is 'lower', x = j + 0.5, y = i + 0.5; - if origin is 'upper', x = j + 0.5, y = Nrows - i - 0.5 - If extent is not None, x and y will be scaled to match, - as in imshow. - If origin is None and extent is not None, then extent - will give the minimum and maximum values of x and y. - ''' - if z.ndim != 2: - raise TypeError("Input must be a 2D array.") - else: - Ny, Nx = z.shape - if self.origin is None: # Not for image-matching. - if self.extent is None: - return np.meshgrid(np.arange(Nx), np.arange(Ny)) - else: - x0,x1,y0,y1 = self.extent - x = np.linspace(x0, x1, Nx) - y = np.linspace(y0, y1, Ny) - return np.meshgrid(x, y) - # Match image behavior: - if self.extent is None: - x0,x1,y0,y1 = (0, Nx, 0, Ny) - else: - x0,x1,y0,y1 = self.extent - dx = float(x1 - x0)/Nx - dy = float(y1 - y0)/Ny - x = x0 + (np.arange(Nx) + 0.5) * dx - y = y0 + (np.arange(Ny) + 0.5) * dy - if self.origin == 'upper': - y = y[::-1] - return np.meshgrid(x,y) - - def _check_xyz(self, args, kwargs): - ''' - For functions like contour, check that the dimensions - of the input arrays match; if x and y are 1D, convert - them to 2D using meshgrid. - - Possible change: I think we should make and use an ArgumentError - Exception class (here and elsewhere). - ''' - x, y = args[:2] - self.ax._process_unit_info(xdata=x, ydata=y, kwargs=kwargs) - x = self.ax.convert_xunits(x) - y = self.ax.convert_yunits(y) - - x = np.asarray(x, dtype=np.float64) - y = np.asarray(y, dtype=np.float64) - z = ma.asarray(args[2], dtype=np.float64) - if z.ndim != 2: - raise TypeError("Input z must be a 2D array.") - else: Ny, Nx = z.shape - if x.shape == z.shape and y.shape == z.shape: - return x,y,z - if x.ndim != 1 or y.ndim != 1: - raise TypeError("Inputs x and y must be 1D or 2D.") - nx, = x.shape - ny, = y.shape - if nx != Nx or ny != Ny: - raise TypeError("Length of x must be number of columns in z,\n" + - "and length of y must be number of rows.") - x,y = np.meshgrid(x,y) - return x,y,z - - - def _contour_args(self, args, kwargs): + def _contour_level_args(self, z, args): + """ + Determine the contour levels and store in self.levels. + """ if self.filled: fn = 'contourf' else: fn = 'contour' - Nargs = len(args) - if Nargs <= 2: - z = ma.asarray(args[0], dtype=np.float64) - x, y = self._initialize_x_y(z) - elif Nargs <=4: - x,y,z = self._check_xyz(args[:3], kwargs) - else: - raise TypeError("Too many arguments to %s; see help(%s)" % (fn,fn)) - z = ma.masked_invalid(z, copy=False) - self.zmax = ma.maximum(z) - self.zmin = ma.minimum(z) - if self.logscale and self.zmin <= 0: - z = ma.masked_where(z <= 0, z) - warnings.warn('Log scale: values of z <=0 have been masked') - self.zmin = z.min() self._auto = False if self.levels is None: - if Nargs == 1 or Nargs == 3: + if len(args) == 0: lev = self._autolev(z, 7) - else: # 2 or 4 args - level_arg = args[-1] + else: + level_arg = args[0] try: if type(level_arg) == int: lev = self._autolev(z, level_arg) @@ -884,7 +867,6 @@ if self.filled and len(lev) < 2: raise ValueError("Filled contours require at least 2 levels.") self.levels = lev - return (x, y, z) def _process_levels(self): self._levels = list(self.levels) @@ -907,7 +889,6 @@ if self.extend in ('both', 'max'): self.layers[-1] = 0.5 * (self.vmax + self._levels[-2]) - def _process_colors(self): """ Color argument processing for contouring. @@ -989,6 +970,241 @@ self.alpha = alpha self.changed() + def find_nearest_contour( self, x, y, indices=None, pixel=True ): + """ + Finds contour that is closest to a point. Defaults to + measuring distance in pixels (screen space - useful for manual + contour labeling), but this can be controlled via a keyword + argument. + + Returns a tuple containing the contour, segment, index of + segment, x & y of segment point and distance to minimum point. + + Call signature:: + + conmin,segmin,imin,xmin,ymin,dmin = find_nearest_contour( + self, x, y, indices=None, pixel=True ) + + Optional keyword arguments:: + + *indices*: + Indexes of contour levels to consider when looking for + nearest point. Defaults to using all levels. + + *pixel*: + If *True*, measure distance in pixel space, if not, measure + distance in axes space. Defaults to *True*. + + """ + + # This function uses a method that is probably quite + # inefficient based on converting each contour segment to + # pixel coordinates and then comparing the given point to + # those coordinates for each contour. This will probably be + # quite slow for complex contours, but for normal use it works + # sufficiently well that the time is not noticeable. + # Nonetheless, improvements could probably be made. + + if indices==None: + indices = range(len(self.levels)) + + dmin = 1e10 + conmin = None + segmin = None + xmin = None + ymin = None + + for icon in indices: + con = self.collections[icon] + paths = con.get_paths() + for segNum, linepath in enumerate(paths): + lc = linepath.vertices + + # transfer all data points to screen coordinates if desired + if pixel: + lc = self.ax.transData.transform(lc) + + ds = (lc[:,0]-x)**2 + (lc[:,1]-y)**2 + d = min( ds ) + if d < dmin: + dmin = d + conmin = icon + segmin = segNum + imin = mpl.mlab.find( ds == d )[0] + xmin = lc[imin,0] + ymin = lc[imin,1] + + return (conmin,segmin,imin,xmin,ymin,dmin) + + +class QuadContourSet(ContourSet): + """ + Create and store a set of contour lines or filled regions. + + User-callable method: clabel + + Useful attributes: + ax: + the axes object in which the contours are drawn + collections: + a silent_list of LineCollections or PolyCollections + levels: + contour levels + layers: + same as levels for line contours; half-way between + levels for filled contours. See _process_colors method. + """ + def __init__(self, ax, *args, **kwargs): + """ + Calculate and draw contour lines or filled regions, depending + on whether keyword arg 'filled' is False (default) or True. + + The first argument of the initializer must be an axes + object. The remaining arguments and keyword arguments + are described in QuadContourSet.contour_doc. + """ + ContourSet.__init__(self, ax, *args, **kwargs) + + def _process_args(self, *args, **kwargs): + """ + Process args and kwargs. + """ + if isinstance(args[0], QuadContourSet): + C = args[0].Cntr + if self.levels is None: + self.levels = args[0].levels + else: + x, y, z = self._contour_args(args, kwargs) + + x0 = ma.minimum(x) + x1 = ma.maximum(x) + y0 = ma.minimum(y) + y1 = ma.maximum(y) + self.ax.update_datalim([(x0,y0), (x1,y1)]) + self.ax.autoscale_view() + _mask = ma.getmask(z) + if _mask is ma.nomask: + _mask = None + C = _cntr.Cntr(x, y, z.filled(), _mask) + self.Cntr = C + + def _get_allsegs_and_allkinds(self): + """ + Create and return allsegs and allkinds by calling underlying C code. + """ + allsegs = [] + if self.filled: + lowers, uppers = self._get_lowers_and_uppers() + allkinds = [] + for level, level_upper in zip(lowers, uppers): + nlist = self.Cntr.trace(level, level_upper, nchunk = self.nchunk) + nseg = len(nlist)//2 + segs = nlist[:nseg] + kinds = nlist[nseg:] + allsegs.append(segs) + allkinds.append(kinds) + else: + allkinds = None + for level in self.levels: + nlist = self.Cntr.trace(level) + nseg = len(nlist)//2 + segs = nlist[:nseg] + allsegs.append(segs) + return allsegs, allkinds + + def _contour_args(self, args, kwargs): + if self.filled: fn = 'contourf' + else: fn = 'contour' + Nargs = len(args) + if Nargs <= 2: + z = ma.asarray(args[0], dtype=np.float64) + x, y = self._initialize_x_y(z) + args = args[1:] + elif Nargs <=4: + x,y,z = self._check_xyz(args[:3], kwargs) + args = args[3:] + else: + raise TypeError("Too many arguments to %s; see help(%s)" % (fn,fn)) + z = ma.masked_invalid(z, copy=False) + self.zmax = ma.maximum(z) + self.zmin = ma.minimum(z) + if self.logscale and self.zmin <= 0: + z = ma.masked_where(z <= 0, z) + warnings.warn('Log scale: values of z <= 0 have been masked') + self.zmin = z.min() + self._contour_level_args(z, args) + return (x, y, z) + + def _check_xyz(self, args, kwargs): + ''' + For functions like contour, check that the dimensions + of the input arrays match; if x and y are 1D, convert + them to 2D using meshgrid. + + Possible change: I think we should make and use an ArgumentError + Exception class (here and elsewhere). + ''' + x, y = args[:2] + self.ax._process_unit_info(xdata=x, ydata=y, kwargs=kwargs) + x = self.ax.convert_xunits(x) + y = self.ax.convert_yunits(y) + + x = np.asarray(x, dtype=np.float64) + y = np.asarray(y, dtype=np.float64) + z = ma.asarray(args[2], dtype=np.float64) + if z.ndim != 2: + raise TypeError("Input z must be a 2D array.") + else: Ny, Nx = z.shape + if x.shape == z.shape and y.shape == z.shape: + return x,y,z + if x.ndim != 1 or y.ndim != 1: + raise TypeError("Inputs x and y must be 1D or 2D.") + nx, = x.shape + ny, = y.shape + if nx != Nx or ny != Ny: + raise TypeError("Length of x must be number of columns in z,\n" + + "and length of y must be number of rows.") + x,y = np.meshgrid(x,y) + return x,y,z + + def _initialize_x_y(self, z): + ''' + Return X, Y arrays such that contour(Z) will match imshow(Z) + if origin is not None. + The center of pixel Z[i,j] depends on origin: + if origin is None, x = j, y = i; + if origin is 'lower', x = j + 0.5, y = i + 0.5; + if origin is 'upper', x = j + 0.5, y = Nrows - i - 0.5 + If extent is not None, x and y will be scaled to match, + as in imshow. + If origin is None and extent is not None, then extent + will give the minimum and maximum values of x and y. + ''' + if z.ndim != 2: + raise TypeError("Input must be a 2D array.") + else: + Ny, Nx = z.shape + if self.origin is None: # Not for image-matching. + if self.extent is None: + return np.meshgrid(np.arange(Nx), np.arange(Ny)) + else: + x0,x1,y0,y1 = self.extent + x = np.linspace(x0, x1, Nx) + y = np.linspace(y0, y1, Ny) + return np.meshgrid(x, y) + # Match image behavior: + if self.extent is None: + x0,x1,y0,y1 = (0, Nx, 0, Ny) + else: + x0,x1,y0,y1 = self.extent + dx = float(x1 - x0)/Nx + dy = float(y1 - y0)/Ny + x = x0 + (np.arange(Nx) + 0.5) * dx + y = y0 + (np.arange(Ny) + 0.5) * dy + if self.origin == 'upper': + y = y[::-1] + return np.meshgrid(x,y) + contour_doc = """ :func:`~matplotlib.pyplot.contour` and :func:`~matplotlib.pyplot.contourf` draw contour lines and @@ -1047,7 +1263,7 @@ handle internal masked regions correctly. ``C = contour(...)`` returns a - :class:`~matplotlib.contour.ContourSet` object. + :class:`~matplotlib.contour.QuadContourSet` object. Optional keyword arguments: @@ -1170,69 +1386,3 @@ .. plot:: mpl_examples/pylab_examples/contourf_demo.py """ - - def find_nearest_contour( self, x, y, indices=None, pixel=True ): - """ - Finds contour that is closest to a point. Defaults to - measuring distance in pixels (screen space - useful for manual - contour labeling), but this can be controlled via a keyword - argument. - - Returns a tuple containing the contour, segment, index of - segment, x & y of segment point and distance to minimum point. - - Call signature:: - - conmin,segmin,imin,xmin,ymin,dmin = find_nearest_contour( - self, x, y, indices=None, pixel=True ) - - Optional keyword arguments:: - - *indices*: - Indexes of contour levels to consider when looking for - nearest point. Defaults to using all levels. - - *pixel*: - If *True*, measure distance in pixel space, if not, measure - distance in axes space. Defaults to *True*. - - """ - - # This function uses a method that is probably quite - # inefficient based on converting each contour segment to - # pixel coordinates and then comparing the given point to - # those coordinates for each contour. This will probably be - # quite slow for complex contours, but for normal use it works - # sufficiently well that the time is not noticeable. - # Nonetheless, improvements could probably be made. - - if indices==None: - indices = range(len(self.levels)) - - dmin = 1e10 - conmin = None - segmin = None - xmin = None - ymin = None - - for icon in indices: - con = self.collections[icon] - paths = con.get_paths() - for segNum, linepath in enumerate(paths): - lc = linepath.vertices - - # transfer all data points to screen coordinates if desired - if pixel: - lc = self.ax.transData.transform(lc) - - ds = (lc[:,0]-x)**2 + (lc[:,1]-y)**2 - d = min( ds ) - if d < dmin: - dmin = d - conmin = icon - segmin = segNum - imin = mpl.mlab.find( ds == d )[0] - xmin = lc[imin,0] - ymin = lc[imin,1] - - return (conmin,segmin,imin,xmin,ymin,dmin) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <md...@us...> - 2010-04-23 18:34:38
|
Revision: 8269 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8269&view=rev Author: mdboom Date: 2010-04-23 18:34:32 +0000 (Fri, 23 Apr 2010) Log Message: ----------- Pass strings to FT2Font -- never Unicode strings. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py trunk/matplotlib/lib/matplotlib/backends/backend_ps.py trunk/matplotlib/lib/matplotlib/mathtext.py trunk/matplotlib/lib/matplotlib/textpath.py Modified: trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py 2010-04-23 18:33:51 UTC (rev 8268) +++ trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py 2010-04-23 18:34:32 UTC (rev 8269) @@ -654,7 +654,7 @@ if 0: flags |= 1 << 17 # TODO: small caps if 0: flags |= 1 << 18 # TODO: force bold - ft2font = FT2Font(fontfile) + ft2font = FT2Font(str(fontfile)) descriptor = { 'Type': Name('FontDescriptor'), Modified: trunk/matplotlib/lib/matplotlib/backends/backend_ps.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_ps.py 2010-04-23 18:33:51 UTC (rev 8268) +++ trunk/matplotlib/lib/matplotlib/backends/backend_ps.py 2010-04-23 18:34:32 UTC (rev 8269) @@ -1104,7 +1104,7 @@ if not rcParams['ps.useafm']: for font_filename, chars in ps_renderer.used_characters.values(): if len(chars): - font = FT2Font(font_filename) + font = FT2Font(str(font_filename)) cmap = font.get_charmap() glyph_ids = [] for c in chars: Modified: trunk/matplotlib/lib/matplotlib/mathtext.py =================================================================== --- trunk/matplotlib/lib/matplotlib/mathtext.py 2010-04-23 18:33:51 UTC (rev 8268) +++ trunk/matplotlib/lib/matplotlib/mathtext.py 2010-04-23 18:34:32 UTC (rev 8269) @@ -597,7 +597,7 @@ cached_font = self._fonts.get(basename) if cached_font is None: - font = FT2Font(basename) + font = FT2Font(str(basename)) cached_font = self.CachedFont(font) self._fonts[basename] = cached_font self._fonts[font.postscript_name] = cached_font Modified: trunk/matplotlib/lib/matplotlib/textpath.py =================================================================== --- trunk/matplotlib/lib/matplotlib/textpath.py 2010-04-23 18:33:51 UTC (rev 8268) +++ trunk/matplotlib/lib/matplotlib/textpath.py 2010-04-23 18:34:32 UTC (rev 8269) @@ -311,7 +311,7 @@ if font_and_encoding is None: font_bunch = self.tex_font_map[dvifont.texname] - font = FT2Font(font_bunch.filename) + font = FT2Font(str(font_bunch.filename)) try: font.select_charmap(1094992451) # select ADOBE_CUSTOM except ValueError: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ef...@us...> - 2010-04-26 19:10:40
|
Revision: 8271 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8271&view=rev Author: efiring Date: 2010-04-26 19:10:18 +0000 (Mon, 26 Apr 2010) Log Message: ----------- hexbin tests: change to a sane baseline Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/axes.py trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/hexbin_extent.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/hexbin_extent.png trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/hexbin_extent.svg Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2010-04-26 18:49:47 UTC (rev 8270) +++ trunk/matplotlib/lib/matplotlib/axes.py 2010-04-26 19:10:18 UTC (rev 8271) @@ -5951,7 +5951,7 @@ corners = ((xmin, ymin), (xmax, ymax)) self.update_datalim( corners) - self.autoscale_view() + self.autoscale_view(tight=True) # add the collection last self.add_collection(collection) Modified: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/hexbin_extent.pdf =================================================================== (Binary files differ) Modified: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/hexbin_extent.png =================================================================== --- trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/hexbin_extent.png 2010-04-26 18:49:47 UTC (rev 8270) +++ trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/hexbin_extent.png 2010-04-26 19:10:18 UTC (rev 8271) @@ -1,199 +1,141 @@ \x89PNG |
From: <ef...@us...> - 2010-04-26 23:05:20
|
Revision: 8275 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8275&view=rev Author: efiring Date: 2010-04-26 23:05:14 +0000 (Mon, 26 Apr 2010) Log Message: ----------- axes: fix autoscale_view for test_axes/single_date test, and update test output. In the old version, single_date was behaving as if tight autoscaling were in effect; now it puts the viewLim on tick marks. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/axes.py trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_date.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_date.png trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_date.svg Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2010-04-26 21:11:03 UTC (rev 8274) +++ trunk/matplotlib/lib/matplotlib/axes.py 2010-04-26 23:05:14 UTC (rev 8275) @@ -1722,14 +1722,20 @@ dl = [ax.dataLim for ax in xshared] bb = mtransforms.BboxBase.union(dl) x0, x1 = bb.intervalx - x0, x1 = mtransforms.nonsingular(x0, x1, increasing=False, - expander=0.05) + xlocator = self.xaxis.get_major_locator() + try: + # e.g. DateLocator has its own nonsingular() + x0, x1 = xlocator.nonsingular(x0, x1) + except AttributeError: + # Default nonsingular for, e.g., MaxNLocator + x0, x1 = mtransforms.nonsingular(x0, x1, increasing=False, + expander=0.05) if self._xmargin > 0: delta = (x1 - x0) * self._xmargin x0 -= delta x1 += delta if not _tight: - x0, x1 = self.xaxis.get_major_locator().view_limits(x0, x1) + x0, x1 = xlocator.view_limits(x0, x1) self.set_xbound(x0, x1) if scaley and self._autoscaleYon: @@ -1737,14 +1743,18 @@ dl = [ax.dataLim for ax in yshared] bb = mtransforms.BboxBase.union(dl) y0, y1 = bb.intervaly - y0, y1 = mtransforms.nonsingular(y0, y1, increasing=False, - expander=0.05) + ylocator = self.yaxis.get_major_locator() + try: + y0, y1 = ylocator.nonsingular(y0, y1) + except AttributeError: + y0, y1 = mtransforms.nonsingular(y0, y1, increasing=False, + expander=0.05) if self._ymargin > 0: delta = (y1 - y0) * self._ymargin y0 -= delta y1 += delta if not _tight: - y0, y1 = self.yaxis.get_major_locator().view_limits(y0, y1) + y0, y1 = ylocator.view_limits(y0, y1) self.set_ybound(y0, y1) #### Drawing Modified: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_date.pdf =================================================================== (Binary files differ) Modified: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_date.png =================================================================== (Binary files differ) Modified: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_date.svg =================================================================== --- trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_date.svg 2010-04-26 21:11:03 UTC (rev 8274) +++ trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_date.svg 2010-04-26 23:05:14 UTC (rev 8275) @@ -37,11 +37,11 @@ <g id="xtick1"> <g id="line2d2"> <defs><path id="m30e32995789d870ad79a2e54c91cf9c6" d="M0.000000 0.000000L0.000000 -4.000000"/></defs> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="125.163821" y="200.290909"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="127.035616" y="200.290909"/> </g></g> <g id="line2d3"> <defs><path id="m9281cae24120827b11d5ea8a7ad3e96b" d="M0.000000 0.000000L0.000000 4.000000"/></defs> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="125.163821" y="43.200000"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="127.035616" y="43.200000"/> </g></g> <g id="text1"> <defs> @@ -54,7 +54,7 @@ <path id="c_956f18cfdaf972f35a6c2b4aaac2532b" d="M8.203125 -72.906250l46.875000 0.000000l0.000000 4.203125l-26.468750 68.703125l-10.296875 0.000000l24.906250 -64.593750l-35.015625 0.000000z"/> <path id="c_cc8d6d580d1b10c8632f7a42cd53db8a" d="M33.015625 -40.375000q-6.640625 0.000000 -10.531250 4.546875q-3.875000 4.531250 -3.875000 12.437500q0.000000 7.859375 3.875000 12.437500q3.890625 4.562500 10.531250 4.562500q6.640625 0.000000 10.515625 -4.562500q3.875000 -4.578125 3.875000 -12.437500q0.000000 -7.906250 -3.875000 -12.437500q-3.875000 -4.546875 -10.515625 -4.546875M52.593750 -71.296875l0.000000 8.984375q-3.718750 -1.750000 -7.500000 -2.671875q-3.781250 -0.937500 -7.500000 -0.937500q-9.765625 0.000000 -14.921875 6.593750q-5.140625 6.593750 -5.875000 19.921875q2.875000 -4.250000 7.218750 -6.515625q4.359375 -2.265625 9.578125 -2.265625q10.984375 0.000000 17.359375 6.671875q6.375000 6.656250 6.375000 18.125000q0.000000 11.234375 -6.640625 18.031250q-6.640625 6.781250 -17.671875 6.781250q-12.656250 0.000000 -19.343750 -9.687500q-6.687500 -9.703125 -6.687500 -28.109375q0.000000 -17.281250 8.203125 -27.562500q8.203125 -10.281250 22.015625 -10.281250q3.718750 0.000000 7.500000 0.734375q3.781250 0.734375 7.890625 2.187500"/> </defs> -<g style="fill: #000000; opacity: 1.000000" transform="translate(97.616946,213.197159)scale(0.120000)"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(99.488741,213.197159)scale(0.120000)"> <use xlink:href="#c_72234ddc5dcad8d05c893ef0371171da"/> <use xlink:href="#c_01d93a582460e35a7945ca50d148ffeb" x="86.279297"/> <use xlink:href="#c_6ec8d5749226675394676a5d2a3b468b" x="147.558594"/> @@ -68,10 +68,10 @@ </g> <g id="xtick2"> <g id="line2d4"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="182.048652" y="200.290909"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="183.294247" y="200.290909"/> </g></g> <g id="line2d5"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="182.048652" y="43.200000"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="183.294247" y="43.200000"/> </g></g> <g id="text2"> <defs> @@ -79,7 +79,7 @@ <path id="c_0bce5afba2dc6b9024b26277c38ad8e8" d="M56.203125 -29.593750l0.000000 4.390625l-41.312500 0.000000q0.593750 9.281250 5.593750 14.140625q5.000000 4.859375 13.937500 4.859375q5.171875 0.000000 10.031250 -1.265625q4.859375 -1.265625 9.656250 -3.812500l0.000000 8.500000q-4.843750 2.046875 -9.921875 3.125000q-5.078125 1.078125 -10.296875 1.078125q-13.093750 0.000000 -20.734375 -7.609375q-7.640625 -7.625000 -7.640625 -20.625000q0.000000 -13.421875 7.250000 -21.296875q7.250000 -7.890625 19.562500 -7.890625q11.031250 0.000000 17.453125 7.109375q6.421875 7.093750 6.421875 19.296875M47.218750 -32.234375q-0.093750 -7.359375 -4.125000 -11.750000q-4.031250 -4.406250 -10.671875 -4.406250q-7.515625 0.000000 -12.031250 4.250000q-4.515625 4.250000 -5.203125 11.968750z"/> <path id="c_f15a64fcd463ef4629c48bab42cde24c" d="M18.109375 -8.203125l0.000000 29.000000l-9.031250 0.000000l0.000000 -75.484375l9.031250 0.000000l0.000000 8.296875q2.843750 -4.875000 7.156250 -7.234375q4.328125 -2.375000 10.328125 -2.375000q9.968750 0.000000 16.187500 7.906250q6.234375 7.906250 6.234375 20.796875q0.000000 12.890625 -6.234375 20.812500q-6.218750 7.906250 -16.187500 7.906250q-6.000000 0.000000 -10.328125 -2.375000q-4.312500 -2.375000 -7.156250 -7.250000M48.687500 -27.296875q0.000000 -9.906250 -4.078125 -15.546875q-4.078125 -5.640625 -11.203125 -5.640625q-7.140625 0.000000 -11.218750 5.640625q-4.078125 5.640625 -4.078125 15.546875q0.000000 9.906250 4.078125 15.546875q4.078125 5.640625 11.218750 5.640625q7.125000 0.000000 11.203125 -5.640625q4.078125 -5.640625 4.078125 -15.546875"/> </defs> -<g style="fill: #000000; opacity: 1.000000" transform="translate(154.322089,213.197159)scale(0.120000)"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(155.567684,213.197159)scale(0.120000)"> <use xlink:href="#c_b672e4bee30772019085dff1098f516d"/> <use xlink:href="#c_0bce5afba2dc6b9024b26277c38ad8e8" x="63.476562"/> <use xlink:href="#c_f15a64fcd463ef4629c48bab42cde24c" x="125.000000"/> @@ -93,13 +93,13 @@ </g> <g id="xtick3"> <g id="line2d6"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="238.006012" y="200.290909"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="238.635616" y="200.290909"/> </g></g> <g id="line2d7"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="238.006012" y="43.200000"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="238.635616" y="43.200000"/> </g></g> <g id="text3"> -<g style="fill: #000000; opacity: 1.000000" transform="translate(210.591950,213.197159)scale(0.120000)"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(211.221554,213.197159)scale(0.120000)"> <use xlink:href="#c_72234ddc5dcad8d05c893ef0371171da"/> <use xlink:href="#c_01d93a582460e35a7945ca50d148ffeb" x="86.279297"/> <use xlink:href="#c_6ec8d5749226675394676a5d2a3b468b" x="147.558594"/> @@ -113,13 +113,13 @@ </g> <g id="xtick4"> <g id="line2d8"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="294.890843" y="200.290909"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="294.894247" y="200.290909"/> </g></g> <g id="line2d9"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="294.890843" y="43.200000"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="294.894247" y="43.200000"/> </g></g> <g id="text4"> -<g style="fill: #000000; opacity: 1.000000" transform="translate(267.297093,213.197159)scale(0.120000)"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(267.300497,213.197159)scale(0.120000)"> <use xlink:href="#c_b672e4bee30772019085dff1098f516d"/> <use xlink:href="#c_0bce5afba2dc6b9024b26277c38ad8e8" x="63.476562"/> <use xlink:href="#c_f15a64fcd463ef4629c48bab42cde24c" x="125.000000"/> @@ -133,16 +133,16 @@ </g> <g id="xtick5"> <g id="line2d10"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="350.848204" y="200.290909"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="350.235616" y="200.290909"/> </g></g> <g id="line2d11"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="350.848204" y="43.200000"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="350.235616" y="43.200000"/> </g></g> <g id="text5"> <defs> <path id="c_bef35738d52871942e50b9de9b122bab" d="M31.781250 -34.625000q-7.031250 0.000000 -11.062500 3.765625q-4.015625 3.765625 -4.015625 10.343750q0.000000 6.593750 4.015625 10.359375q4.031250 3.765625 11.062500 3.765625q7.031250 0.000000 11.078125 -3.781250q4.062500 -3.796875 4.062500 -10.343750q0.000000 -6.578125 -4.031250 -10.343750q-4.015625 -3.765625 -11.109375 -3.765625M21.921875 -38.812500q-6.343750 -1.562500 -9.890625 -5.906250q-3.531250 -4.359375 -3.531250 -10.609375q0.000000 -8.734375 6.218750 -13.812500q6.234375 -5.078125 17.062500 -5.078125q10.890625 0.000000 17.093750 5.078125q6.203125 5.078125 6.203125 13.812500q0.000000 6.250000 -3.546875 10.609375q-3.531250 4.343750 -9.828125 5.906250q7.125000 1.656250 11.093750 6.500000q3.984375 4.828125 3.984375 11.796875q0.000000 10.609375 -6.468750 16.281250q-6.468750 5.656250 -18.531250 5.656250q-12.046875 0.000000 -18.531250 -5.656250q-6.468750 -5.671875 -6.468750 -16.281250q0.000000 -6.968750 4.000000 -11.796875q4.015625 -4.843750 11.140625 -6.500000M18.312500 -54.390625q0.000000 5.656250 3.531250 8.828125q3.546875 3.171875 9.937500 3.171875q6.359375 0.000000 9.937500 -3.171875q3.593750 -3.171875 3.593750 -8.828125q0.000000 -5.671875 -3.593750 -8.843750q-3.578125 -3.171875 -9.937500 -3.171875q-6.390625 0.000000 -9.937500 3.171875q-3.531250 3.171875 -3.531250 8.843750"/> </defs> -<g style="fill: #000000; opacity: 1.000000" transform="translate(323.332579,213.197159)scale(0.120000)"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(322.719991,213.197159)scale(0.120000)"> <use xlink:href="#c_72234ddc5dcad8d05c893ef0371171da"/> <use xlink:href="#c_01d93a582460e35a7945ca50d148ffeb" x="86.279297"/> <use xlink:href="#c_6ec8d5749226675394676a5d2a3b468b" x="147.558594"/> @@ -156,13 +156,13 @@ </g> <g id="xtick6"> <g id="line2d12"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="407.733035" y="200.290909"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="406.494247" y="200.290909"/> </g></g> <g id="line2d13"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="407.733035" y="43.200000"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="406.494247" y="43.200000"/> </g></g> <g id="text6"> -<g style="fill: #000000; opacity: 1.000000" transform="translate(380.037722,213.197159)scale(0.120000)"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(378.798934,213.197159)scale(0.120000)"> <use xlink:href="#c_b672e4bee30772019085dff1098f516d"/> <use xlink:href="#c_0bce5afba2dc6b9024b26277c38ad8e8" x="63.476562"/> <use xlink:href="#c_f15a64fcd463ef4629c48bab42cde24c" x="125.000000"/> @@ -176,13 +176,13 @@ </g> <g id="xtick7"> <g id="line2d14"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="463.690396" y="200.290909"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="461.835616" y="200.290909"/> </g></g> <g id="line2d15"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="463.690396" y="43.200000"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="461.835616" y="43.200000"/> </g></g> <g id="text7"> -<g style="fill: #000000; opacity: 1.000000" transform="translate(436.182583,213.197159)scale(0.120000)"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(434.327804,213.197159)scale(0.120000)"> <use xlink:href="#c_72234ddc5dcad8d05c893ef0371171da"/> <use xlink:href="#c_01d93a582460e35a7945ca50d148ffeb" x="86.279297"/> <use xlink:href="#c_6ec8d5749226675394676a5d2a3b468b" x="147.558594"/> @@ -194,18 +194,38 @@ </g> </g> </g> +<g id="xtick8"> +<g id="line2d16"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="518.094247" y="200.290909"/> +</g></g> +<g id="line2d17"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="518.094247" y="43.200000"/> +</g></g> +<g id="text8"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(490.406747,213.197159)scale(0.120000)"> +<use xlink:href="#c_b672e4bee30772019085dff1098f516d"/> +<use xlink:href="#c_0bce5afba2dc6b9024b26277c38ad8e8" x="63.476562"/> +<use xlink:href="#c_f15a64fcd463ef4629c48bab42cde24c" x="125.000000"/> +<use xlink:href="#c_d41d8cd98f00b204e9800998ecf8427e" x="188.476562"/> +<use xlink:href="#c_42baa63129a918535c52adb20d687ea7" x="220.263672"/> +<use xlink:href="#c_cd96f817f3cab988d24a2b49a5577fe6" x="283.886719"/> +<use xlink:href="#c_956f18cfdaf972f35a6c2b4aaac2532b" x="347.509766"/> +<use xlink:href="#c_cd96f817f3cab988d24a2b49a5577fe6" x="411.132812"/> </g> +</g> +</g> +</g> <g id="matplotlib.axis2"> <g id="ytick1"> -<g id="line2d16"> +<g id="line2d18"> <defs><path id="m3400efa6b1638b3fea9e19e898273957" d="M0.000000 0.000000L4.000000 0.000000"/></defs> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="200.290909"/> </g></g> -<g id="line2d17"> +<g id="line2d19"> <defs><path id="m20b58b2501143cb5e0a5e8f1ef6f1643" d="M0.000000 0.000000L-4.000000 0.000000"/></defs> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="200.290909"/> </g></g> -<g id="text8"> +<g id="text9"> <defs> <path id="c_6a8d56c819c37117ab4cf023bec22a5a" d="M10.593750 -35.500000l62.593750 0.000000l0.000000 8.296875l-62.593750 0.000000z"/> </defs> @@ -217,13 +237,13 @@ </g> </g> <g id="ytick2"> -<g id="line2d18"> +<g id="line2d20"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="177.849351"/> </g></g> -<g id="line2d19"> +<g id="line2d21"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="177.849351"/> </g></g> -<g id="text9"> +<g id="text10"> <g style="fill: #000000; opacity: 1.000000" transform="translate(44.750000,182.216538)scale(0.120000)"> <use xlink:href="#c_6a8d56c819c37117ab4cf023bec22a5a"/> <use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="83.789062"/> @@ -232,13 +252,13 @@ </g> </g> <g id="ytick3"> -<g id="line2d20"> +<g id="line2d22"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="155.407792"/> </g></g> -<g id="line2d21"> +<g id="line2d23"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="155.407792"/> </g></g> -<g id="text10"> +<g id="text11"> <g style="fill: #000000; opacity: 1.000000" transform="translate(44.953125,159.774980)scale(0.120000)"> <use xlink:href="#c_6a8d56c819c37117ab4cf023bec22a5a"/> <use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="83.789062"/> @@ -247,13 +267,13 @@ </g> </g> <g id="ytick4"> -<g id="line2d22"> +<g id="line2d24"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="132.966234"/> </g></g> -<g id="line2d23"> +<g id="line2d25"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="132.966234"/> </g></g> -<g id="text11"> +<g id="text12"> <g style="fill: #000000; opacity: 1.000000" transform="translate(44.687500,137.333421)scale(0.120000)"> <use xlink:href="#c_6a8d56c819c37117ab4cf023bec22a5a"/> <use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="83.789062"/> @@ -262,13 +282,13 @@ </g> </g> <g id="ytick5"> -<g id="line2d24"> +<g id="line2d26"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="110.524675"/> </g></g> -<g id="line2d25"> +<g id="line2d27"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="110.524675"/> </g></g> -<g id="text12"> +<g id="text13"> <defs> <path id="c_1260a2df50f305f3db244e29828f968e" d="M10.796875 -72.906250l38.718750 0.000000l0.000000 8.312500l-29.687500 0.000000l0.000000 17.859375q2.140625 -0.734375 4.281250 -1.093750q2.156250 -0.359375 4.312500 -0.359375q12.203125 0.000000 19.328125 6.687500q7.140625 6.687500 7.140625 18.109375q0.000000 11.765625 -7.328125 18.296875q-7.328125 6.515625 -20.656250 6.515625q-4.593750 0.000000 -9.359375 -0.781250q-4.750000 -0.781250 -9.828125 -2.343750l0.000000 -9.921875q4.390625 2.390625 9.078125 3.562500q4.687500 1.171875 9.906250 1.171875q8.453125 0.000000 13.375000 -4.437500q4.937500 -4.437500 4.937500 -12.062500q0.000000 -7.609375 -4.937500 -12.046875q-4.921875 -4.453125 -13.375000 -4.453125q-3.953125 0.000000 -7.890625 0.875000q-3.921875 0.875000 -8.015625 2.734375z"/> </defs> @@ -280,13 +300,13 @@ </g> </g> <g id="ytick6"> -<g id="line2d26"> +<g id="line2d28"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="88.083117"/> </g></g> -<g id="line2d27"> +<g id="line2d29"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="88.083117"/> </g></g> -<g id="text13"> +<g id="text14"> <defs> <path id="c_a0416418d96557a09b8c1332d34883ba" d="M37.796875 -64.312500l-24.906250 38.921875l24.906250 0.000000zM35.203125 -72.906250l12.406250 0.000000l0.000000 47.515625l10.406250 0.000000l0.000000 8.203125l-10.406250 0.000000l0.000000 17.187500l-9.812500 0.000000l0.000000 -17.187500l-32.906250 0.000000l0.000000 -9.515625z"/> </defs> @@ -298,13 +318,13 @@ </g> </g> <g id="ytick7"> -<g id="line2d28"> +<g id="line2d30"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="65.641558"/> </g></g> -<g id="line2d29"> +<g id="line2d31"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="65.641558"/> </g></g> -<g id="text14"> +<g id="text15"> <defs> <path id="c_3dcfa38a02242cb63ec6726c6e70be7a" d="M40.578125 -39.312500q7.078125 1.515625 11.046875 6.312500q3.984375 4.781250 3.984375 11.812500q0.000000 10.781250 -7.421875 16.703125q-7.421875 5.906250 -21.093750 5.906250q-4.578125 0.000000 -9.437500 -0.906250q-4.859375 -0.906250 -10.031250 -2.718750l0.000000 -9.515625q4.093750 2.390625 8.968750 3.609375q4.890625 1.218750 10.218750 1.218750q9.265625 0.000000 14.125000 -3.656250q4.859375 -3.656250 4.859375 -10.640625q0.000000 -6.453125 -4.515625 -10.078125q-4.515625 -3.640625 -12.562500 -3.640625l-8.500000 0.000000l0.000000 -8.109375l8.890625 0.000000q7.265625 0.000000 11.125000 -2.906250q3.859375 -2.906250 3.859375 -8.375000q0.000000 -5.609375 -3.984375 -8.609375q-3.968750 -3.015625 -11.390625 -3.015625q-4.062500 0.000000 -8.703125 0.890625q-4.640625 0.875000 -10.203125 2.718750l0.000000 -8.781250q5.625000 -1.562500 10.531250 -2.343750q4.906250 -0.781250 9.250000 -0.781250q11.234375 0.000000 17.765625 5.109375q6.546875 5.093750 6.546875 13.781250q0.000000 6.062500 -3.468750 10.234375q-3.468750 4.171875 -9.859375 5.781250"/> </defs> @@ -316,13 +336,13 @@ </g> </g> <g id="ytick8"> -<g id="line2d30"> +<g id="line2d32"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="43.200000"/> </g></g> -<g id="line2d31"> +<g id="line2d33"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="43.200000"/> </g></g> -<g id="text15"> +<g id="text16"> <defs> <path id="c_ed3f3ed3ebfbd18bcb9c012009a68ad1" d="M19.187500 -8.296875l34.421875 0.000000l0.000000 8.296875l-46.281250 0.000000l0.000000 -8.296875q5.609375 -5.812500 15.296875 -15.593750q9.703125 -9.796875 12.187500 -12.640625q4.734375 -5.312500 6.609375 -9.000000q1.890625 -3.687500 1.890625 -7.250000q0.000000 -5.812500 -4.078125 -9.468750q-4.078125 -3.671875 -10.625000 -3.671875q-4.640625 0.000000 -9.796875 1.609375q-5.140625 1.609375 -11.000000 4.890625l0.000000 -9.968750q5.953125 -2.390625 11.125000 -3.609375q5.187500 -1.218750 9.484375 -1.218750q11.328125 0.000000 18.062500 5.671875q6.734375 5.656250 6.734375 15.125000q0.000000 4.500000 -1.687500 8.531250q-1.671875 4.015625 -6.125000 9.484375q-1.218750 1.421875 -7.765625 8.187500q-6.531250 6.765625 -18.453125 18.921875"/> </defs> @@ -352,7 +372,7 @@ <path style="fill: #ffffff; opacity: 1.000000" d="M72.000000 388.800000L518.400000 388.800000L518.400000 231.709091 L72.000000 231.709091L72.000000 388.800000"/> </g> -<g id="line2d32"> +<g id="line2d34"> <defs> <clipPath id="pdceb94b59b302b6d614f8fc54d3b8e04"> <rect x="72.000000" y="231.709091" width="446.400000" height="157.090909"/> @@ -360,14 +380,14 @@ </defs><g clip-path="url(#pdceb94b59b302b6d614f8fc54d3b8e04)"><use style="fill: #ff0000; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m87f81da4bcf58d853202912065521dc1" x="306.159120" y="311.152208"/> </g></g> <g id="matplotlib.axis3"> -<g id="xtick8"> -<g id="line2d33"> +<g id="xtick9"> +<g id="line2d35"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="72.000000" y="388.800000"/> </g></g> -<g id="line2d34"> +<g id="line2d36"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="72.000000" y="231.709091"/> </g></g> -<g id="text16"> +<g id="text17"> <defs> <path id="c_7a2040fe3b94fcd41d0a72c84e93b115" d="M31.781250 -66.406250q-7.609375 0.000000 -11.453125 7.500000q-3.828125 7.484375 -3.828125 22.531250q0.000000 14.984375 3.828125 22.484375q3.843750 7.500000 11.453125 7.500000q7.671875 0.000000 11.500000 -7.500000q3.843750 -7.500000 3.843750 -22.484375q0.000000 -15.046875 -3.843750 -22.531250q-3.828125 -7.500000 -11.500000 -7.500000M31.781250 -74.218750q12.265625 0.000000 18.734375 9.703125q6.468750 9.687500 6.468750 28.140625q0.000000 18.406250 -6.468750 28.109375q-6.468750 9.687500 -18.734375 9.687500q-12.250000 0.000000 -18.718750 -9.687500q-6.468750 -9.703125 -6.468750 -28.109375q0.000000 -18.453125 6.468750 -28.140625q6.468750 -9.703125 18.718750 -9.703125"/> </defs> @@ -381,14 +401,14 @@ </g> </g> </g> -<g id="xtick9"> -<g id="line2d35"> +<g id="xtick10"> +<g id="line2d37"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="127.800000" y="388.800000"/> </g></g> -<g id="line2d36"> +<g id="line2d38"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="127.800000" y="231.709091"/> </g></g> -<g id="text17"> +<g id="text18"> <g style="fill: #000000; opacity: 1.000000" transform="translate(105.698438,401.706250)scale(0.120000)"> <use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a"/> <use xlink:href="#c_cd96f817f3cab988d24a2b49a5577fe6" x="63.623047"/> @@ -399,14 +419,14 @@ </g> </g> </g> -<g id="xtick10"> -<g id="line2d37"> +<g id="xtick11"> +<g id="line2d39"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="183.600000" y="388.800000"/> </g></g> -<g id="line2d38"> +<g id="line2d40"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="183.600000" y="231.709091"/> </g></g> -<g id="text18"> +<g id="text19"> <g style="fill: #000000; opacity: 1.000000" transform="translate(161.568750,401.706250)scale(0.120000)"> <use xlink:href="#c_956f18cfdaf972f35a6c2b4aaac2532b"/> <use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> @@ -417,14 +437,14 @@ </g> </g> </g> -<g id="xtick11"> -<g id="line2d39"> +<g id="xtick12"> +<g id="line2d41"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="239.400000" y="388.800000"/> </g></g> -<g id="line2d40"> +<g id="line2d42"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="239.400000" y="231.709091"/> </g></g> -<g id="text19"> +<g id="text20"> <g style="fill: #000000; opacity: 1.000000" transform="translate(217.368750,401.706250)scale(0.120000)"> <use xlink:href="#c_956f18cfdaf972f35a6c2b4aaac2532b"/> <use xlink:href="#c_42baa63129a918535c52adb20d687ea7" x="63.623047"/> @@ -435,14 +455,14 @@ </g> </g> </g> -<g id="xtick12"> -<g id="line2d41"> +<g id="xtick13"> +<g id="line2d43"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="295.200000" y="388.800000"/> </g></g> -<g id="line2d42"> +<g id="line2d44"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="295.200000" y="231.709091"/> </g></g> -<g id="text20"> +<g id="text21"> <g style="fill: #000000; opacity: 1.000000" transform="translate(273.168750,401.706250)scale(0.120000)"> <use xlink:href="#c_956f18cfdaf972f35a6c2b4aaac2532b"/> <use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" x="63.623047"/> @@ -453,14 +473,14 @@ </g> </g> </g> -<g id="xtick13"> -<g id="line2d43"> +<g id="xtick14"> +<g id="line2d45"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="351.000000" y="388.800000"/> </g></g> -<g id="line2d44"> +<g id="line2d46"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="351.000000" y="231.709091"/> </g></g> -<g id="text21"> +<g id="text22"> <g style="fill: #000000; opacity: 1.000000" transform="translate(328.968750,401.706250)scale(0.120000)"> <use xlink:href="#c_956f18cfdaf972f35a6c2b4aaac2532b"/> <use xlink:href="#c_3dcfa38a02242cb63ec6726c6e70be7a" x="63.623047"/> @@ -471,14 +491,14 @@ </g> </g> </g> -<g id="xtick14"> -<g id="line2d45"> +<g id="xtick15"> +<g id="line2d47"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="406.800000" y="388.800000"/> </g></g> -<g id="line2d46"> +<g id="line2d48"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="406.800000" y="231.709091"/> </g></g> -<g id="text22"> +<g id="text23"> <g style="fill: #000000; opacity: 1.000000" transform="translate(384.768750,401.706250)scale(0.120000)"> <use xlink:href="#c_956f18cfdaf972f35a6c2b4aaac2532b"/> <use xlink:href="#c_a0416418d96557a09b8c1332d34883ba" x="63.623047"/> @@ -489,14 +509,14 @@ </g> </g> </g> -<g id="xtick15"> -<g id="line2d47"> +<g id="xtick16"> +<g id="line2d49"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="462.600000" y="388.800000"/> </g></g> -<g id="line2d48"> +<g id="line2d50"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="462.600000" y="231.709091"/> </g></g> -<g id="text23"> +<g id="text24"> <g style="fill: #000000; opacity: 1.000000" transform="translate(440.568750,401.706250)scale(0.120000)"> <use xlink:href="#c_956f18cfdaf972f35a6c2b4aaac2532b"/> <use xlink:href="#c_1260a2df50f305f3db244e29828f968e" x="63.623047"/> @@ -507,14 +527,14 @@ </g> </g> </g> -<g id="xtick16"> -<g id="line2d49"> +<g id="xtick17"> +<g id="line2d51"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="518.400000" y="388.800000"/> </g></g> -<g id="line2d50"> +<g id="line2d52"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="518.400000" y="231.709091"/> </g></g> -<g id="text24"> +<g id="text25"> <g style="fill: #000000; opacity: 1.000000" transform="translate(496.368750,401.706250)scale(0.120000)"> <use xlink:href="#c_956f18cfdaf972f35a6c2b4aaac2532b"/> <use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="63.623047"/> @@ -528,13 +548,13 @@ </g> <g id="matplotlib.axis4"> <g id="ytick9"> -<g id="line2d51"> +<g id="line2d53"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="388.800000"/> </g></g> -<g id="line2d52"> +<g id="line2d54"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="388.800000"/> </g></g> -<g id="text25"> +<g id="text26"> <g style="fill: #000000; opacity: 1.000000" transform="translate(44.765625,393.167188)scale(0.120000)"> <use xlink:href="#c_6a8d56c819c37117ab4cf023bec22a5a"/> <use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="83.789062"/> @@ -543,13 +563,13 @@ </g> </g> <g id="ytick10"> -<g id="line2d53"> +<g id="line2d55"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="366.358442"/> </g></g> -<g id="line2d54"> +<g id="line2d56"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="366.358442"/> </g></g> -<g id="text26"> +<g id="text27"> <g style="fill: #000000; opacity: 1.000000" transform="translate(44.750000,370.725629)scale(0.120000)"> <use xlink:href="#c_6a8d56c819c37117ab4cf023bec22a5a"/> <use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="83.789062"/> @@ -558,13 +578,13 @@ </g> </g> <g id="ytick11"> -<g id="line2d55"> +<g id="line2d57"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="343.916883"/> </g></g> -<g id="line2d56"> +<g id="line2d58"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="343.916883"/> </g></g> -<g id="text27"> +<g id="text28"> <g style="fill: #000000; opacity: 1.000000" transform="translate(44.953125,348.284071)scale(0.120000)"> <use xlink:href="#c_6a8d56c819c37117ab4cf023bec22a5a"/> <use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="83.789062"/> @@ -573,13 +593,13 @@ </g> </g> <g id="ytick12"> -<g id="line2d57"> +<g id="line2d59"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="321.475325"/> </g></g> -<g id="line2d58"> +<g id="line2d60"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="321.475325"/> </g></g> -<g id="text28"> +<g id="text29"> <g style="fill: #000000; opacity: 1.000000" transform="translate(44.687500,325.842512)scale(0.120000)"> <use xlink:href="#c_6a8d56c819c37117ab4cf023bec22a5a"/> <use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="83.789062"/> @@ -588,13 +608,13 @@ </g> </g> <g id="ytick13"> -<g id="line2d59"> +<g id="line2d61"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="299.033766"/> </g></g> -<g id="line2d60"> +<g id="line2d62"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="299.033766"/> </g></g> -<g id="text29"> +<g id="text30"> <g style="fill: #000000; opacity: 1.000000" transform="translate(44.968750,303.400954)scale(0.120000)"> <use xlink:href="#c_6a8d56c819c37117ab4cf023bec22a5a"/> <use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="83.789062"/> @@ -603,13 +623,13 @@ </g> </g> <g id="ytick14"> -<g id="line2d61"> +<g id="line2d63"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="276.592208"/> </g></g> -<g id="line2d62"> +<g id="line2d64"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="276.592208"/> </g></g> -<g id="text30"> +<g id="text31"> <g style="fill: #000000; opacity: 1.000000" transform="translate(44.593750,280.959395)scale(0.120000)"> <use xlink:href="#c_6a8d56c819c37117ab4cf023bec22a5a"/> <use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="83.789062"/> @@ -618,13 +638,13 @@ </g> </g> <g id="ytick15"> -<g id="line2d63"> +<g id="line2d65"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="254.150649"/> </g></g> -<g id="line2d64"> +<g id="line2d66"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="254.150649"/> </g></g> -<g id="text31"> +<g id="text32"> <g style="fill: #000000; opacity: 1.000000" transform="translate(44.890625,258.517837)scale(0.120000)"> <use xlink:href="#c_6a8d56c819c37117ab4cf023bec22a5a"/> <use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="83.789062"/> @@ -633,13 +653,13 @@ </g> </g> <g id="ytick16"> -<g id="line2d65"> +<g id="line2d67"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="231.709091"/> </g></g> -<g id="line2d66"> +<g id="line2d68"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="231.709091"/> </g></g> -<g id="text32"> +<g id="text33"> <g style="fill: #000000; opacity: 1.000000" transform="translate(45.125000,236.076278)scale(0.120000)"> <use xlink:href="#c_6a8d56c819c37117ab4cf023bec22a5a"/> <use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="83.789062"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ef...@us...> - 2010-04-27 00:04:21
|
Revision: 8276 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8276&view=rev Author: efiring Date: 2010-04-27 00:04:14 +0000 (Tue, 27 Apr 2010) Log Message: ----------- dates: DateLocator.nonsingular checks for near-singularity. Also fixed fill_units test and baseline files Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/dates.py trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/fill_units.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/fill_units.png trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/fill_units.svg trunk/matplotlib/lib/matplotlib/tests/test_axes.py Modified: trunk/matplotlib/lib/matplotlib/dates.py =================================================================== --- trunk/matplotlib/lib/matplotlib/dates.py 2010-04-26 23:05:14 UTC (rev 8275) +++ trunk/matplotlib/lib/matplotlib/dates.py 2010-04-27 00:04:14 UTC (rev 8276) @@ -509,8 +509,9 @@ def nonsingular(self, vmin, vmax): unit = self._get_unit() - vmin -= 2*unit - vmax += 2*unit + if abs(vmax - vmin) < 1e-6: + vmin -= 2*unit + vmax += 2*unit return vmin, vmax class RRuleLocator(DateLocator): Modified: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/fill_units.pdf =================================================================== (Binary files differ) Modified: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/fill_units.png =================================================================== (Binary files differ) Modified: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/fill_units.svg =================================================================== --- trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/fill_units.svg 2010-04-26 23:05:14 UTC (rev 8275) +++ trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/fill_units.svg 2010-04-27 00:04:14 UTC (rev 8276) @@ -26,10 +26,6 @@ </defs><path style="fill: #0000ff; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" clip-path="url(#p2d9d45e9a89c598215ad1d41ce14c5ae)" d="M72.000000 180.654545L72.000000 180.654545L274.909091 43.200000 L274.909091 180.654545L72.000000 180.654545"/> </g> -<g id="patch4"> -<path style="fill: #0000ff; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" clip-path="url(#p2d9d45e9a89c598215ad1d41ce14c5ae)" d="M72.000000 180.654545L72.000000 180.654545L274.909091 43.200000 -L274.909091 180.654545L72.000000 180.654545"/> -</g> <g id="line2d1"> <path style="fill: none; stroke: #ff0000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" clip-path="url(#p2d9d45e9a89c598215ad1d41ce14c5ae)" d="M72.000000 165.381818"/> </g> @@ -347,25 +343,25 @@ </g> </g> </g> -<g id="patch5"> +<g id="patch4"> <path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M72.000000 43.200000L274.909091 43.200000"/> </g> -<g id="patch6"> +<g id="patch5"> <path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M274.909091 180.654545L274.909091 43.200000"/> </g> -<g id="patch7"> +<g id="patch6"> <path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M72.000000 180.654545L274.909091 180.654545"/> </g> -<g id="patch8"> +<g id="patch7"> <path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M72.000000 180.654545L72.000000 43.200000"/> </g> </g> <g id="axes2"> -<g id="patch9"> +<g id="patch8"> <path style="fill: #ffffff; opacity: 1.000000" d="M315.490909 180.654545L518.400000 180.654545L518.400000 43.200000 L315.490909 43.200000L315.490909 180.654545"/> </g> -<g id="patch10"> +<g id="patch9"> <defs> <clipPath id="p3d2e026aea9c82e875e510dfacc02aae"> <rect x="315.490909" y="43.200000" width="202.909091" height="137.454545"/> @@ -650,209 +646,305 @@ </g> </g> </g> -<g id="patch11"> +<g id="patch10"> <path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M315.490909 43.200000L518.400000 43.200000"/> </g> -<g id="patch12"> +<g id="patch11"> <path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M518.400000 180.654545L518.400000 43.200000"/> </g> -<g id="patch13"> +<g id="patch12"> <path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M315.490909 180.654545L518.400000 180.654545"/> </g> -<g id="patch14"> +<g id="patch13"> <path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M315.490909 180.654545L315.490909 43.200000"/> </g> </g> <g id="axes3"> -<g id="patch15"> +<g id="patch14"> <path style="fill: #ffffff; opacity: 1.000000" d="M72.000000 345.600000L274.909091 345.600000L274.909091 208.145455 L72.000000 208.145455L72.000000 345.600000"/> </g> -<g id="line2d95"> +<g id="patch15"> <defs> <clipPath id="pa02e4b8b38c6ad0a77aadc2b541c639b"> <rect x="72.000000" y="208.145455" width="202.909091" height="137.454545"/> </clipPath> -</defs><path style="fill: none; stroke: #ff0000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" clip-path="url(#pa02e4b8b38c6ad0a77aadc2b541c639b)" d="M173.454545 276.872727"/> +</defs><path style="fill: #0000ff; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" clip-path="url(#pa02e4b8b38c6ad0a77aadc2b541c639b)" d="M72.000000 345.600000L72.000000 345.600000L274.909091 208.145455 +L274.909091 345.600000L72.000000 345.600000"/> </g> +<g id="line2d95"> +<path style="fill: none; stroke: #ff0000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" clip-path="url(#pa02e4b8b38c6ad0a77aadc2b541c639b)" d="M72.000000 330.327273"/> +</g> <g id="matplotlib.axis5"> <g id="xtick27"> <g id="line2d96"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="93.925745" y="345.600000"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="72.000000" y="345.600000"/> </g></g> <g id="line2d97"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="93.925745" y="208.145455"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="72.000000" y="208.145455"/> </g></g> <g id="text23"> <defs> -<path id="c_680e57528fc97ec49605e10827a40086" d="M39.406250 -66.218750q-10.750000 0.000000 -17.078125 8.015625q-6.312500 8.000000 -6.312500 21.828125q0.000000 13.765625 6.312500 21.781250q6.328125 8.000000 17.078125 8.000000q10.734375 0.000000 17.015625 -8.000000q6.281250 -8.015625 6.281250 -21.781250q0.000000 -13.828125 -6.281250 -21.828125q-6.281250 -8.015625 -17.015625 -8.015625M39.406250 -74.218750q15.328125 0.000000 24.500000 10.281250q9.187500 10.281250 9.187500 27.562500q0.000000 17.234375 -9.187500 27.515625q-9.171875 10.281250 -24.500000 10.281250q-15.375000 0.000000 -24.593750 -10.250000q-9.203125 -10.265625 -9.203125 -27.546875q0.000000 -17.281250 9.203125 -27.562500q9.218750 -10.281250 24.593750 -10.281250"/> -<path id="c_d650c37394b681142a10dfc54356d478" d="M48.781250 -52.593750l0.000000 8.406250q-3.812500 -2.109375 -7.640625 -3.156250q-3.828125 -1.046875 -7.734375 -1.046875q-8.750000 0.000000 -13.593750 5.546875q-4.828125 5.531250 -4.828125 15.546875q0.000000 10.015625 4.828125 15.562500q4.843750 5.531250 13.593750 5.531250q3.906250 0.000000 7.734375 -1.046875q3.828125 -1.046875 7.640625 -3.156250l0.000000 8.312500q-3.765625 1.750000 -7.796875 2.625000q-4.015625 0.890625 -8.562500 0.890625q-12.359375 0.000000 -19.640625 -7.765625q-7.265625 -7.765625 -7.265625 -20.953125q0.000000 -13.375000 7.343750 -21.031250q7.359375 -7.671875 20.156250 -7.671875q4.140625 0.000000 8.093750 0.859375q3.953125 0.843750 7.671875 2.546875"/> -<path id="c_0f8c41144cfbf448378cb6fd1cc8e549" d="M18.312500 -70.218750l0.000000 15.531250l18.500000 0.000000l0.000000 6.984375l-18.500000 0.000000l0.000000 29.687500q0.000000 6.687500 1.828125 8.593750q1.828125 1.906250 7.453125 1.906250l9.218750 0.000000l0.000000 7.515625l-9.218750 0.000000q-10.406250 0.000000 -14.359375 -3.875000q-3.953125 -3.890625 -3.953125 -14.140625l0.000000 -29.687500l-6.593750 0.000000l0.000000 -6.984375l6.593750 0.000000l0.000000 -15.531250z"/> -<path id="c_d41d8cd98f00b204e9800998ecf8427e" d=""/> +<path id="c_1e6263c731c474ef67a09469452f0b99" d="M11.718750 -12.406250l10.296875 0.000000l0.000000 12.406250l-10.296875 0.000000zM11.718750 -51.703125l10.296875 0.000000l0.000000 12.390625l-10.296875 0.000000z"/> </defs> -<g style="fill: #000000; opacity: 1.000000" transform="translate(47.661044,384.000949)rotate(-30.0)scale(0.120000)"> -<use xlink:href="#c_680e57528fc97ec49605e10827a40086"/> -<use xlink:href="#c_d650c37394b681142a10dfc54356d478" x="78.710938"/> -<use xlink:href="#c_0f8c41144cfbf448378cb6fd1cc8e549" x="133.691406"/> -<use xlink:href="#c_d41d8cd98f00b204e9800998ecf8427e" x="172.900391"/> -<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" x="204.687500"/> -<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="268.310547"/> -<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="331.933594"/> -<use xlink:href="#c_956f18cfdaf972f35a6c2b4aaac2532b" x="395.556641"/> +<g style="fill: #000000; opacity: 1.000000" transform="translate(26.668983,383.461887)rotate(-30.0)scale(0.120000)"> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="127.246094"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="160.937500"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="224.560547"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="288.183594"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="321.875000"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="385.498047"/> </g> </g> </g> <g id="xtick28"> <g id="line2d98"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="119.236650" y="345.600000"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="88.909091" y="345.600000"/> </g></g> <g id="line2d99"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="119.236650" y="208.145455"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="88.909091" y="208.145455"/> </g></g> <g id="text24"> -<defs> -<path id="c_6023715d605f81e6eb43b7f9d77e7c51" d="M34.187500 -63.187500l-13.390625 36.281250l26.812500 0.000000zM28.609375 -72.906250l11.187500 0.000000l27.781250 72.906250l-10.250000 0.000000l-6.640625 -18.703125l-32.859375 0.000000l-6.640625 18.703125l-10.406250 0.000000z"/> -<path id="c_f15a64fcd463ef4629c48bab42cde24c" d="M18.109375 -8.203125l0.000000 29.000000l-9.031250 0.000000l0.000000 -75.484375l9.031250 0.000000l0.000000 8.296875q2.843750 -4.875000 7.156250 -7.234375q4.328125 -2.375000 10.328125 -2.375000q9.968750 0.000000 16.187500 7.906250q6.234375 7.906250 6.234375 20.796875q0.000000 12.890625 -6.234375 20.812500q-6.218750 7.906250 -16.187500 7.906250q-6.000000 0.000000 -10.328125 -2.375000q-4.312500 -2.375000 -7.156250 -7.250000M48.687500 -27.296875q0.000000 -9.906250 -4.078125 -15.546875q-4.078125 -5.640625 -11.203125 -5.640625q-7.140625 0.000000 -11.218750 5.640625q-4.078125 5.640625 -4.078125 15.546875q0.000000 9.906250 4.078125 15.546875q4.078125 5.640625 11.218750 5.640625q7.125000 0.000000 11.203125 -5.640625q4.078125 -5.640625 4.078125 -15.546875"/> -<path id="c_6ec8d5749226675394676a5d2a3b468b" d="M41.109375 -46.296875q-1.515625 -0.875000 -3.296875 -1.281250q-1.781250 -0.421875 -3.921875 -0.421875q-7.625000 0.000000 -11.703125 4.953125q-4.078125 4.953125 -4.078125 14.234375l0.000000 28.812500l-9.031250 0.000000l0.000000 -54.687500l9.031250 0.000000l0.000000 8.500000q2.843750 -4.984375 7.375000 -7.390625q4.546875 -2.421875 11.046875 -2.421875q0.921875 0.000000 2.046875 0.125000q1.125000 0.109375 2.484375 0.359375z"/> -</defs> -<g style="fill: #000000; opacity: 1.000000" transform="translate(72.281835,384.087477)rotate(-30.0)scale(0.120000)"> -<use xlink:href="#c_6023715d605f81e6eb43b7f9d77e7c51"/> -<use xlink:href="#c_f15a64fcd463ef4629c48bab42cde24c" x="68.408203"/> -<use xlink:href="#c_6ec8d5749226675394676a5d2a3b468b" x="131.884766"/> -<use xlink:href="#c_d41d8cd98f00b204e9800998ecf8427e" x="172.998047"/> -<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" x="204.785156"/> -<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="268.408203"/> -<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="332.031250"/> -<use xlink:href="#c_bef35738d52871942e50b9de9b122bab" x="395.654297"/> +<g style="fill: #000000; opacity: 1.000000" transform="translate(43.578074,383.461887)rotate(-30.0)scale(0.120000)"> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/> +<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" x="63.623047"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="127.246094"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="160.937500"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="224.560547"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="288.183594"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="321.875000"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="385.498047"/> </g> </g> </g> <g id="xtick29"> <g id="line2d100"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="144.547555" y="345.600000"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="105.818182" y="345.600000"/> </g></g> <g id="line2d101"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="144.547555" y="208.145455"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="105.818182" y="208.145455"/> </g></g> <g id="text25"> -<g style="fill: #000000; opacity: 1.000000" transform="translate(98.106943,384.102512)rotate(-30.0)scale(0.120000)"> -<use xlink:href="#c_680e57528fc97ec49605e10827a40086"/> -<use xlink:href="#c_d650c37394b681142a10dfc54356d478" x="78.710938"/> -<use xlink:href="#c_0f8c41144cfbf448378cb6fd1cc8e549" x="133.691406"/> -<use xlink:href="#c_d41d8cd98f00b204e9800998ecf8427e" x="172.900391"/> -<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" x="204.687500"/> -<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="268.310547"/> -<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="331.933594"/> -<use xlink:href="#c_bef35738d52871942e50b9de9b122bab" x="395.556641"/> +<g style="fill: #000000; opacity: 1.000000" transform="translate(60.487165,383.461887)rotate(-30.0)scale(0.120000)"> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/> +<use xlink:href="#c_a0416418d96557a09b8c1332d34883ba" x="63.623047"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="127.246094"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="160.937500"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="224.560547"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="288.183594"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="321.875000"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="385.498047"/> </g> </g> </g> <g id="xtick30"> <g id="line2d102"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="169.720150" y="345.600000"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="122.727273" y="345.600000"/> </g></g> <g id="line2d103"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="169.720150" y="208.145455"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="122.727273" y="208.145455"/> </g></g> <g id="text26"> -<g style="fill: #000000; opacity: 1.000000" transform="translate(122.778866,384.079665)rotate(-30.0)scale(0.120000)"> -<use xlink:href="#c_6023715d605f81e6eb43b7f9d77e7c51"/> -<use xlink:href="#c_f15a64fcd463ef4629c48bab42cde24c" x="68.408203"/> -<use xlink:href="#c_6ec8d5749226675394676a5d2a3b468b" x="131.884766"/> -<use xlink:href="#c_d41d8cd98f00b204e9800998ecf8427e" x="172.998047"/> -<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" x="204.785156"/> -<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="268.408203"/> -<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="332.031250"/> -<use xlink:href="#c_cd96f817f3cab988d24a2b49a5577fe6" x="395.654297"/> +<g style="fill: #000000; opacity: 1.000000" transform="translate(77.396256,383.461887)rotate(-30.0)scale(0.120000)"> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/> +<use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="63.623047"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="127.246094"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="160.937500"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="224.560547"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="288.183594"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="321.875000"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="385.498047"/> </g> </g> </g> <g id="xtick31"> <g id="line2d104"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="195.031055" y="345.600000"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="139.636364" y="345.600000"/> </g></g> <g id="line2d105"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="195.031055" y="208.145455"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="139.636364" y="208.145455"/> </g></g> <g id="text27"> -<g style="fill: #000000; opacity: 1.000000" transform="translate(148.603974,384.094699)rotate(-30.0)scale(0.120000)"> -<use xlink:href="#c_680e57528fc97ec49605e10827a40086"/> -<use xlink:href="#c_d650c37394b681142a10dfc54356d478" x="78.710938"/> -<use xlink:href="#c_0f8c41144cfbf448378cb6fd1cc8e549" x="133.691406"/> -<use xlink:href="#c_d41d8cd98f00b204e9800998ecf8427e" x="172.900391"/> -<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" x="204.687500"/> -<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="268.310547"/> -<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="331.933594"/> -<use xlink:href="#c_cd96f817f3cab988d24a2b49a5577fe6" x="395.556641"/> +<g style="fill: #000000; opacity: 1.000000" transform="translate(94.305346,383.461887)rotate(-30.0)scale(0.120000)"> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/> +<use xlink:href="#c_bef35738d52871942e50b9de9b122bab" x="63.623047"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="127.246094"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="160.937500"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="224.560547"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="288.183594"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="321.875000"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="385.498047"/> </g> </g> </g> <g id="xtick32"> <g id="line2d106"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="220.203649" y="345.600000"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="156.545455" y="345.600000"/> </g></g> <g id="line2d107"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="220.203649" y="208.145455"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="156.545455" y="208.145455"/> </g></g> <g id="text28"> -<g style="fill: #000000; opacity: 1.000000" transform="translate(173.221771,384.103102)rotate(-30.0)scale(0.120000)"> -<use xlink:href="#c_6023715d605f81e6eb43b7f9d77e7c51"/> -<use xlink:href="#c_f15a64fcd463ef4629c48bab42cde24c" x="68.408203"/> -<use xlink:href="#c_6ec8d5749226675394676a5d2a3b468b" x="131.884766"/> -<use xlink:href="#c_d41d8cd98f00b204e9800998ecf8427e" x="172.998047"/> -<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" x="204.785156"/> -<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="268.408203"/> -<use xlink:href="#c_42baa63129a918535c52adb20d687ea7" x="332.031250"/> -<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="395.654297"/> +<g style="fill: #000000; opacity: 1.000000" transform="translate(111.660982,383.204074)rotate(-30.0)scale(0.120000)"> +<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="127.246094"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="160.937500"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="224.560547"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="288.183594"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="321.875000"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="385.498047"/> </g> </g> </g> <g id="xtick33"> <g id="line2d108"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="245.514555" y="345.600000"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="173.454545" y="345.600000"/> </g></g> <g id="line2d109"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="245.514555" y="208.145455"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="173.454545" y="208.145455"/> </g></g> <g id="text29"> -<g style="fill: #000000; opacity: 1.000000" transform="translate(199.046879,384.118137)rotate(-30.0)scale(0.120000)"> -<use xlink:href="#c_680e57528fc97ec49605e10827a40086"/> -<use xlink:href="#c_d650c37394b681142a10dfc54356d478" x="78.710938"/> -<use xlink:href="#c_0f8c41144cfbf448378cb6fd1cc8e549" x="133.691406"/> -<use xlink:href="#c_d41d8cd98f00b204e9800998ecf8427e" x="172.900391"/> -<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" x="204.687500"/> -<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="268.310547"/> -<use xlink:href="#c_42baa63129a918535c52adb20d687ea7" x="331.933594"/> -<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="395.556641"/> +<g style="fill: #000000; opacity: 1.000000" transform="translate(128.570073,383.204074)rotate(-30.0)scale(0.120000)"> +<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/> +<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" x="63.623047"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="127.246094"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="160.937500"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="224.560547"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="288.183594"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="321.875000"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="385.498047"/> </g> </g> </g> <g id="xtick34"> <g id="line2d110"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="270.687149" y="345.600000"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="190.363636" y="345.600000"/> </g></g> <g id="line2d111"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="270.687149" y="208.145455"/> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="190.363636" y="208.145455"/> </g></g> <g id="text30"> -<g style="fill: #000000; opacity: 1.000000" transform="translate(223.975904,383.946852)rotate(-30.0)scale(0.120000)"> -<use xlink:href="#c_6023715d605f81e6eb43b7f9d77e7c51"/> -<use xlink:href="#c_f15a64fcd463ef4629c48bab42cde24c" x="68.408203"/> -<use xlink:href="#c_6ec8d5749226675394676a5d2a3b468b" x="131.884766"/> -<use xlink:href="#c_d41d8cd98f00b204e9800998ecf8427e" x="172.998047"/> -<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" x="204.785156"/> -<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="268.408203"/> -<use xlink:href="#c_42baa63129a918535c52adb20d687ea7" x="332.031250"/> -<use xlink:href="#c_42baa63129a918535c52adb20d687ea7" x="395.654297"/> +<g style="fill: #000000; opacity: 1.000000" transform="translate(145.479164,383.204074)rotate(-30.0)scale(0.120000)"> +<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/> +<use xlink:href="#c_a0416418d96557a09b8c1332d34883ba" x="63.623047"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="127.246094"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="160.937500"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="224.560547"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="288.183594"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="321.875000"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="385.498047"/> </g> </g> </g> +<g id="xtick35"> +<g id="line2d112"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="207.272727" y="345.600000"/> +</g></g> +<g id="line2d113"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="207.272727" y="208.145455"/> +</g></g> <g id="text31"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(162.388254,383.204074)rotate(-30.0)scale(0.120000)"> +<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/> +<use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="63.623047"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="127.246094"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="160.937500"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="224.560547"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="288.183594"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="321.875000"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="385.498047"/> +</g> +</g> +</g> +<g id="xtick36"> +<g id="line2d114"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="224.181818" y="345.600000"/> +</g></g> +<g id="line2d115"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="224.181818" y="208.145455"/> +</g></g> +<g id="text32"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(179.297345,383.204074)rotate(-30.0)scale(0.120000)"> +<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/> +<use xlink:href="#c_bef35738d52871942e50b9de9b122bab" x="63.623047"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="127.246094"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="160.937500"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="224.560547"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="288.183594"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="321.875000"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="385.498047"/> +</g> +</g> +</g> +<g id="xtick37"> +<g id="line2d116"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="241.090909" y="345.600000"/> +</g></g> +<g id="line2d117"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="241.090909" y="208.145455"/> +</g></g> +<g id="text33"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(195.827550,383.422824)rotate(-30.0)scale(0.120000)"> +<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="127.246094"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="160.937500"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="224.560547"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="288.183594"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="321.875000"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="385.498047"/> +</g> +</g> +</g> +<g id="xtick38"> +<g id="line2d118"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="258.000000" y="345.600000"/> +</g></g> +<g id="line2d119"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="258.000000" y="208.145455"/> +</g></g> +<g id="text34"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(212.736641,383.422824)rotate(-30.0)scale(0.120000)"> +<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1"/> +<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" x="63.623047"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="127.246094"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="160.937500"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="224.560547"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="288.183594"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="321.875000"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="385.498047"/> +</g> +</g> +</g> +<g id="xtick39"> +<g id="line2d120"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="274.909091" y="345.600000"/> +</g></g> +<g id="line2d121"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="274.909091" y="208.145455"/> +</g></g> +<g id="text35"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(229.578074,383.461887)rotate(-30.0)scale(0.120000)"> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="127.246094"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="160.937500"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="224.560547"/> +<use xlink:href="#c_1e6263c731c474ef67a09469452f0b99" x="288.183594"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="321.875000"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="385.498047"/> +</g> +</g> +</g> +<g id="text36"> <defs> <path id="c_dbe439baa035de1a298d0549b22269d8" d="M9.812500 -72.906250l46.093750 0.000000l0.000000 8.312500l-36.234375 0.000000l0.000000 21.578125l34.718750 0.000000l0.000000 8.296875l-34.718750 0.000000l0.000000 26.421875l37.109375 0.000000l0.000000 8.296875l-46.968750 0.000000z"/> <path id="c_9e4b30cbdf32072672ded72e9074c4c9" d="M-0.296875 -72.906250l61.671875 0.000000l0.000000 8.312500l-25.875000 0.000000l0.000000 64.593750l-9.906250 0.000000l0.000000 -64.593750l-25.890625 0.000000z"/> </defs> -<g style="fill: #000000; opacity: 1.000000" transform="translate(166.571733,400.353102)scale(0.120000)"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(166.571733,397.383762)scale(0.120000)"> <use xlink:href="#c_dbe439baa035de1a298d0549b22269d8"/> <use xlink:href="#c_9e4b30cbdf32072672ded72e9074c4c9" x="63.183594"/> </g> @@ -860,116 +952,166 @@ </g> <g id="matplotlib.axis6"> <g id="ytick21"> -<g id="line2d112"> +<g id="line2d122"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="345.600000"/> </g></g> -<g id="line2d113"> +<g id="line2d123"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="274.909091" y="345.600000"/> </g></g> -<g id="text32"> -<g style="fill: #000000; opacity: 1.000000" transform="translate(50.328125,349.967187)scale(0.120000)"> -<use xlink:href="#c_cd96f817f3cab988d24a2b49a5577fe6"/> +<g id="text37"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(50.500000,349.967187)scale(0.120000)"> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/> <use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="63.623047"/> -<use xlink:href="#c_a0416418d96557a09b8c1332d34883ba" x="95.410156"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="95.410156"/> </g> </g> </g> <g id="ytick22"> -<g id="line2d114"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="322.690909"/> +<g id="line2d124"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="330.327273"/> </g></g> -<g id="line2d115"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="274.909091" y="322.690909"/> +<g id="line2d125"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="274.909091" y="330.327273"/> </g></g> -<g id="text33"> -<g style="fill: #000000; opacity: 1.000000" transform="translate(50.421875,327.058097)scale(0.120000)"> -<use xlink:href="#c_cd96f817f3cab988d24a2b49a5577fe6"/> -<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="63.623047"/> -<use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="95.410156"/> +<g id="text38"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(43.375000,334.694460)scale(0.120000)"> +<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> +<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="127.246094"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="159.033203"/> </g> </g> </g> <g id="ytick23"> -<g id="line2d116"> +<g id="line2d126"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="315.054545"/> +</g></g> +<g id="line2d127"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="274.909091" y="315.054545"/> +</g></g> +<g id="text39"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(42.937500,319.421733)scale(0.120000)"> +<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> +<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="127.246094"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="159.033203"/> +</g> +</g> +</g> +<g id="ytick24"> +<g id="line2d128"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="299.781818"/> </g></g> -<g id="line2d117"> +<g id="line2d129"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="274.909091" y="299.781818"/> </g></g> -<g id="text34"> -<g style="fill: #000000; opacity: 1.000000" transform="translate(50.484375,304.149006)scale(0.120000)"> -<use xlink:href="#c_cd96f817f3cab988d24a2b49a5577fe6"/> -<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="63.623047"/> -<use xlink:href="#c_bef35738d52871942e50b9de9b122bab" x="95.410156"/> +<g id="text40"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(42.984375,304.149006)scale(0.120000)"> +<use xlink:href="#c_3dcfa38a02242cb63ec6726c6e70be7a"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> +<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="127.246094"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="159.033203"/> </g> </g> </g> -<g id="ytick24"> -<g id="line2d118"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="276.872727"/> +<g id="ytick25"> +<g id="line2d130"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="284.509091"/> </g></g> -<g id="line2d119"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="274.909091" y="276.872727"/> +<g id="line2d131"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="274.909091" y="284.509091"/> </g></g> -<g id="text35"> -<g style="fill: #000000; opacity: 1.000000" transform="translate(43.375000,281.239915)scale(0.120000)"> -<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/> +<g id="text41"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(42.656250,288.876278)scale(0.120000)"> +<use xlink:href="#c_a0416418d96557a09b8c1332d34883ba"/> <use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> <use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="127.246094"/> <use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="159.033203"/> </g> </g> </g> -<g id="ytick25"> -<g id="line2d120"> +<g id="ytick26"> +<g id="line2d132"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="269.236364"/> +</g></g> +<g id="line2d133"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="274.909091" y="269.236364"/> +</g></g> +<g id="text42"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(42.984375,273.603551)scale(0.120000)"> +<use xlink:href="#c_1260a2df50f305f3db244e29828f968e"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> +<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="127.246094"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="159.033203"/> +</g> +</g> +</g> +<g id="ytick27"> +<g id="line2d134"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="253.963636"/> </g></g> -<g id="line2d121"> +<g id="line2d135"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="274.909091" y="253.963636"/> </g></g> -<g id="text36"> -<g style="fill: #000000; opacity: 1.000000" transform="translate(43.781250,258.330824)scale(0.120000)"> -<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/> +<g id="text43"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(42.906250,258.330824)scale(0.120000)"> +<use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a"/> <use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> <use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="127.246094"/> -<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" x="159.033203"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="159.033203"/> </g> </g> </g> -<g id="ytick26"> -<g id="line2d122"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="231.054545"/> +<g id="ytick28"> +<g id="line2d136"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="238.690909"/> </g></g> -<g id="line2d123"> -<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="274.909091" y="231.054545"/> +<g id="line2d137"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="274.909091" y="238.690909"/> </g></g> -<g id="text37"> -<g style="fill: #000000; opacity: 1.000000" transform="translate(43.250000,235.421733)scale(0.120000)"> -<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/> +<g id="text44"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(43.046875,243.058097)scale(0.120000)"> +<use xlink:href="#c_956f18cfdaf972f35a6c2b4aaac2532b"/> <use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> <use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="127.246094"/> -<use xlink:href="#c_a0416418d96557a09b8c1332d34883ba" x="159.033203"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="159.033203"/> </g> </g> </g> -<g id="ytick27"> -<g id="line2d124"> +<g id="ytick29"> +<g id="line2d138"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="223.418182"/> +</g></g> +<g id="line2d139"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="274.909091" y="223.418182"/> +</g></g> +<g id="text45"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(42.875000,227.785369)scale(0.120000)"> +<use xlink:href="#c_bef35738d52871942e50b9de9b122bab"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> +<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="127.246094"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="159.033203"/> +</g> +</g> +</g> +<g id="ytick30"> +<g id="line2d140"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="208.145455"/> </g></g> -<g id="line2d125"> +<g id="line2d141"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="274.909091" y="208.145455"/> </g></g> -<g id="text38"> -<g style="fill: #000000; opacity: 1.000000" transform="translate(43.343750,212.512642)scale(0.120000)"> -<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/> +<g id="text46"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(42.812500,212.512642)scale(0.120000)"> +<use xlink:href="#c_cd96f817f3cab988d24a2b49a5577fe6"/> <use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> <use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="127.246094"/> -<use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="159.033203"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="159.033203"/> </g> </g> </g> -<g id="text39"> -<g style="fill: #000000; opacity: 1.000000" transform="translate(38.250000,284.818040)rotate(-90.0)scale(0.120000)"> +<g id="text47"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(37.656250,284.818040)rotate(-90.0)scale(0.120000)"> <use xlink:href="#c_d821beae607506e87470f334d9ff47af"/> <use xlink:href="#c_0bce5afba2dc6b9024b26277c38ad8e8" x="63.476562"/> <use xlink:href="#c_e3864de5dabf2f8dd9eee74726882ec1" x="125.000000"/> @@ -1002,21 +1144,18 @@ </defs><path style="fill: #0000ff; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" clip-path="url(#p42a322063e64e6fa296be7cf0ea77b7c)" d="M315.490909 345.600000L315.490909 345.600000L518.400000 208.145455 L518.400000 345.600000L315.490909 345.600000"/> </g> -<g id="line2d126"> +<g id="line2d142"> <path style="fill: none; stroke: #ff0000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" clip-path="url(#p42a322063e64e6fa296be7cf0ea77b7c)" d="M315.490909 330.327273"/> </g> <g id="matplotlib.axis7"> -<g id="xtick35"> -<g id="line2d127"> +<g id="xtick40"> +<g id="line2d143"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="315.490909" y="345.600000"/> </g></g> -<g id="line2d128"> +<g id="line2d144"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="315.490909" y="208.145455"/> </g></g> -<g id="text40"> -<defs> -<path id="c_1e6263c731c474ef67a09469452f0b99" d="M11.718750 -12.406250l10.296875 0.000000l0.000000 12.406250l-10.296875 0.000000zM11.718750 -51.703125l10.296875 0.000000l0.000000 12.390625l-10.296875 0.000000z"/> -</defs> +<g id="text48"> <g style="fill: #000000; opacity: 1.000000" transform="translate(270.159892,383.461887)rotate(-30.0)scale(0.120000)"> <use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/> <use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> @@ -1029,14 +1168,14 @@ </g> </g> </g> -<g id="xtick36"> -<g id="line2d129"> +<g id="xtick41"> +<g id="line2d145"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="332.400000" y="345.600000"/> </g></g> -<g id="line2d130"> +<g id="line2d146"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="332.400000" y="208.145455"/> </g></g> -<g id="text41"> +<g id="text49"> <g style="fill: #000000; opacity: 1.000000" transform="translate(287.068983,383.461887)rotate(-30.0)scale(0.120000)"> <use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/> <use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" x="63.623047"/> @@ -1049,14 +1188,14 @@ </g> </g> </g> -<g id="xtick37"> -<g id="line2d131"> +<g id="xtick42"> +<g id="line2d147"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="349.309091" y="345.600000"/> </g></g> -<g id="line2d132"> +<g id="line2d148"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="349.309091" y="208.145455"/> </g></g> -<g id="text42"> +<g id="text50"> <g style="fill: #000000; opacity: 1.000000" transform="translate(303.978074,383.461887)rotate(-30.0)scale(0.120000)"> <use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/> <use xlink:href="#c_a0416418d96557a09b8c1332d34883ba" x="63.623047"/> @@ -1069,14 +1208,14 @@ </g> </g> </g> -<g id="xtick38"> -<g id="line2d133"> +<g id="xtick43"> +<g id="line2d149"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="366.218182" y="345.600000"/> </g></g> -<g id="line2d134"> +<g id="line2d150"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="366.218182" y="208.145455"/> </g></g> -<g id="text43"> +<g id="text51"> <g style="fill: #000000; opacity: 1.000000" transform="translate(320.887165,383.461887)rotate(-30.0)scale(0.120000)"> <use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/> <use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="63.623047"/> @@ -1089,14 +1228,14 @@ </g> </g> </g> -<g id="xtick39"> -<g id="line2d135"> +<g id="xtick44"> +<g id="line2d151"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="383.127273" y="345.600000"/> </g></g> -<g id="line2d136"> +<g id="line2d152"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="383.127273" y="208.145455"/> </g></g> -<g id="text44"> +<g id="text52"> <g style="fill: #000000; opacity: 1.000000" transform="translate(337.796256,383.461887)rotate(-30.0)scale(0.120000)"> <use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/> <use xlink:href="#c_bef35738d52871942e50b9de9b122bab" x="63.623047"/> @@ -1109,14 +1248,14 @@ </g> </g> </g> -<g id="xtick40"> -<g id="line2d137"> +<g id="xtick45"> +<g id="line2d153"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="400.036364" y="345.600000"/> </g></g> -<g id="line2d138"> +<g id="line2d154"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="400.036364" y="208.145455"/> </g></g> -<g id="text45"> +<g id="text53"> <g style="fill: #000000; opacity: 1.000000" transform="translate(355.151891,383.204074)rotate(-30.0)scale(0.120000)"> <use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/> <use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> @@ -1129,14 +1268,14 @@ </g> </g> </g> -<g id="xtick41"> -<g id="line2d139"> +<g id="xtick46"> +<g id="line2d155"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="416.945455" y="345.600000"/> </g></g> -<g id="line2d140"> +<g id="line2d156"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="416.945455" y="208.145455"/> </g></g> -<g id="text46"> +<g id="text54"> <g style="fill: #000000; opacity: 1.000000" transform="translate(372.060982,383.204074)rotate(-30.0)scale(0.120000)"> <use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/> <use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" x="63.623047"/> @@ -1149,14 +1288,14 @@ </g> </g> </g> -<g id="xtick42"> -<g id="line2d141"> +<g id="xtick47"> +<g id="line2d157"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="433.854545" y="345.600000"/> </g></g> -<g id="line2d142"> +<g id="line2d158"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="433.854545" y="208.145455"/> </g></g> -<g id="text47"> +<g id="text55"> <g style="fill: #000000; opacity: 1.000000" transform="translate(388.970073,383.204074)rotate(-30.0)scale(0.120000)"> <use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/> <use xlink:href="#c_a0416418d96557a09b8c1332d34883ba" x="63.623047"/> @@ -1169,14 +1308,14 @@ </g> </g> </g> -<g id="xtick43"> -<g id="line2d143"> +<g id="xtick48"> +<g id="line2d159"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="450.763636" y="345.600000"/> </g></g> -<g id="line2d144"> +<g id="line2d160"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="450.763636" y="208.145455"/> </g></g> -<g id="text48"> +<g id="text56"> <g style="fill: #000000; opacity: 1.000000" transform="translate(405.879163,383.204074)rotate(-30.0)scale(0.120000)"> <use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/> <use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="63.623047"/> @@ -1189,14 +1328,14 @@ </g> </g> </g> -<g id="xtick44"> -<g id="line2d145"> +<g id="xtick49"> +<g id="line2d161"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="467.672727" y="345.600000"/> </g></g> -<g id="line2d146"> +<g id="line2d162"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="467.672727" y="208.145455"/> </g></g> -<g id="text49"> +<g id="text57"> <g style="fill: #000000; opacity: 1.000000" transform="translate(422.788254,383.204074)rotate(-30.0)scale(0.120000)"> <use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/> <use xlink:href="#c_bef35738d52871942e50b9de9b122bab" x="63.623047"/> @@ -1209,14 +1348,14 @@ </g> </g> </g> -<g id="xtick45"> -<g id="line2d147"> +<g id="xtick50"> +<g id="line2d163"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="484.581818" y="345.600000"/> </g></g> -<g id="line2d148"> +<g id="line2d164"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="484.581818" y="208.145455"/> </g></g> -<g id="text50"> +<g id="text58"> <g style="fill: #000000; opacity: 1.000000" transform="translate(439.318459,383.422824)rotate(-30.0)scale(0.120000)"> <use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1"/> <use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> @@ -1229,14 +1368,14 @@ </g> </g> </g> -<g id="xtick46"> -<g id="line2d149"> +<g id="xtick51"> +<g id="line2d165"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="501.490909" y="345.600000"/> </g></g> -<g id="line2d150"> +<g id="line2d166"> <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="501.490909" y="208.145455"/> </g></g> -<g id="text51"> +<g id="text59"> <g style="fill: #000000; opacity: 1.000000" transform="translate(456.227550,383.422824)rotate(-30.0)scale(0.120000)"> <use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1"/> <use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" x="63.623047"/> @@ -1249,14 +1388,14 @@ </g> </g> </g> -<g id="xtick47"> -<g id="line2d151"> +<g id="xtick52"> +<g id="line2d167"> <g ><use style="fill: none; stroke: #000000; stroke-wid... [truncated message content] |
From: <md...@us...> - 2010-04-27 19:39:33
|
Revision: 8277 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8277&view=rev Author: mdboom Date: 2010-04-27 19:39:27 +0000 (Tue, 27 Apr 2010) Log Message: ----------- Expose tolerance argument to image_comparison decorator. Use it to raise the tolerance for the test_figimage test. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/testing/decorators.py trunk/matplotlib/lib/matplotlib/tests/test_image.py Modified: trunk/matplotlib/lib/matplotlib/testing/decorators.py =================================================================== --- trunk/matplotlib/lib/matplotlib/testing/decorators.py 2010-04-27 00:04:14 UTC (rev 8276) +++ trunk/matplotlib/lib/matplotlib/testing/decorators.py 2010-04-27 19:39:27 UTC (rev 8277) @@ -46,7 +46,7 @@ return nose.tools.make_decorator(f)(failer) return known_fail_decorator -def image_comparison(baseline_images=None,extensions=None): +def image_comparison(baseline_images=None,extensions=None,tol=1e-3): """ call signature:: @@ -118,7 +118,6 @@ 'image does not exist: %s'%expected) # compare the images - tol=1e-3 # default tolerance err = compare_images( expected, actual, tol, in_decorator=True ) if err: Modified: trunk/matplotlib/lib/matplotlib/tests/test_image.py =================================================================== --- trunk/matplotlib/lib/matplotlib/tests/test_image.py 2010-04-27 00:04:14 UTC (rev 8276) +++ trunk/matplotlib/lib/matplotlib/tests/test_image.py 2010-04-27 19:39:27 UTC (rev 8277) @@ -29,7 +29,7 @@ fig.savefig('image_interps') -@image_comparison(baseline_images=['figimage-0', 'figimage-1'], extensions=['png']) +@image_comparison(baseline_images=['figimage-0', 'figimage-1'], extensions=['png'], tol=1.5e-3) def test_figimage(): 'test the figimage method' This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ef...@us...> - 2010-04-28 19:17:23
|
Revision: 8282 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8282&view=rev Author: efiring Date: 2010-04-28 19:17:17 +0000 (Wed, 28 Apr 2010) Log Message: ----------- savefig: make the "transparent" kwarg work as advertised Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/backend_bases.py trunk/matplotlib/lib/matplotlib/figure.py Modified: trunk/matplotlib/lib/matplotlib/backend_bases.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backend_bases.py 2010-04-28 18:14:06 UTC (rev 8281) +++ trunk/matplotlib/lib/matplotlib/backend_bases.py 2010-04-28 19:17:17 UTC (rev 8282) @@ -868,7 +868,7 @@ Backends need to implement a few specific methods in order to use their own timing mechanisms so that the timer events are integrated into their event loops. - + Mandatory functions that must be implemented: * _timer_start: Contains backend-specific code for starting the timer * _timer_stop: Contains backend-specific code for stopping the timer @@ -883,7 +883,7 @@ * _on_timer: This is the internal function that any timer object should call, which will handle the task of running all callbacks that have been set. - + Attributes: * interval: The time between timer events in milliseconds. Default is 1000 ms. @@ -1938,9 +1938,9 @@ Creates a new backend-specific subclass of :class:`backend_bases.Timer`. This is useful for getting periodic events through the backend's native event loop. Implemented only for backends with GUIs. - + optional arguments: - + *interval* Timer interval in milliseconds *callbacks* Modified: trunk/matplotlib/lib/matplotlib/figure.py =================================================================== --- trunk/matplotlib/lib/matplotlib/figure.py 2010-04-28 18:14:06 UTC (rev 8281) +++ trunk/matplotlib/lib/matplotlib/figure.py 2010-04-28 19:17:17 UTC (rev 8282) @@ -1040,8 +1040,10 @@ backend. Most backends support png, pdf, ps, eps and svg. *transparent*: - If *True*, the figure patch and axes patches will all be - transparent. This is useful, for example, for displaying + If *True*, the axes patches will all be transparent; the + figure patch will also be transparent unless facecolor + and/or edgecolor are specified via kwargs. + This is useful, for example, for displaying a plot on top of a colored background on a web page. The transparency of these patches will be restored to their original values upon exit of this function. @@ -1061,9 +1063,7 @@ """ - for key in ('dpi', 'facecolor', 'edgecolor'): - if key not in kwargs: - kwargs[key] = rcParams['savefig.%s'%key] + kwargs.setdefault('dpi', rcParams['savefig.dpi']) extension = rcParams['savefig.extension'] if args and is_string_like(args[0]) and '.' not in args[0] and extension != 'auto': @@ -1072,20 +1072,25 @@ transparent = kwargs.pop('transparent', False) if transparent: - original_figure_alpha = self.patch.get_alpha() - self.patch.set_alpha(0.0) - original_axes_alpha = [] + kwargs.setdefault('facecolor', 'none') + kwargs.setdefault('edgecolor', 'none') + original_axes_colors = [] for ax in self.axes: patch = ax.patch - original_axes_alpha.append(patch.get_alpha()) - patch.set_alpha(0.0) + original_axes_colors.append((patch.get_facecolor(), + patch.get_edgecolor())) + patch.set_facecolor('none') + patch.set_edgecolor('none') + else: + kwargs.setdefault('facecolor', rcParams['savefig.facecolor']) + kwargs.setdefault('edgecolor', rcParams['savefig.edgecolor']) self.canvas.print_figure(*args, **kwargs) if transparent: - self.patch.set_alpha(original_figure_alpha) - for ax, alpha in zip(self.axes, original_axes_alpha): - ax.patch.set_alpha(alpha) + for ax, cc in zip(self.axes, original_axes_colors): + ax.patch.set_facecolor(cc[0]) + ax.patch.set_edgecolor(cc[1]) @docstring.dedent_interpd def colorbar(self, mappable, cax=None, ax=None, **kw): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <md...@us...> - 2010-04-29 16:18:15
|
Revision: 8288 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8288&view=rev Author: mdboom Date: 2010-04-29 16:18:09 +0000 (Thu, 29 Apr 2010) Log Message: ----------- Fix bug with legends on non-linear scales. Reported by Shrividya Ravi. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/path.py trunk/matplotlib/lib/matplotlib/transforms.py Modified: trunk/matplotlib/lib/matplotlib/path.py =================================================================== --- trunk/matplotlib/lib/matplotlib/path.py 2010-04-28 20:59:13 UTC (rev 8287) +++ trunk/matplotlib/lib/matplotlib/path.py 2010-04-29 16:18:09 UTC (rev 8288) @@ -292,9 +292,13 @@ control points appropriately. """ from transforms import Bbox + path = self if transform is not None: transform = transform.frozen() - return Bbox(get_path_extents(self, transform)) + if not transform.is_affine: + path = self.transformed(transform) + transform = None + return Bbox(get_path_extents(path, transform)) def intersects_path(self, other, filled=True): """ @@ -506,8 +510,8 @@ def unit_circle_righthalf(cls): """ (staticmethod) Returns a :class:`Path` of the right half - of a unit circle. The circle is approximated using cubic Bezier - curves. This uses 4 splines around the circle using the approach + of a unit circle. The circle is approximated using cubic Bezier + curves. This uses 4 splines around the circle using the approach presented here: Lancaster, Don. `Approximating a Circle or an Ellipse Using Four @@ -536,7 +540,7 @@ [SQRTHALF-MAGIC45, SQRTHALF+MAGIC45], [MAGIC, 1.0], [0.0, 1.0], - + [0.0, -1.0]], np.float_) Modified: trunk/matplotlib/lib/matplotlib/transforms.py =================================================================== --- trunk/matplotlib/lib/matplotlib/transforms.py 2010-04-28 20:59:13 UTC (rev 8287) +++ trunk/matplotlib/lib/matplotlib/transforms.py 2010-04-29 16:18:09 UTC (rev 8288) @@ -1066,7 +1066,7 @@ """ Used by C/C++ -based backends to get at the array matrix data. """ - return self.frozen().__array__() + raise NotImplementedError def transform(self, values): """ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <md...@us...> - 2010-04-30 16:54:17
|
Revision: 8291 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8291&view=rev Author: mdboom Date: 2010-04-30 16:54:10 +0000 (Fri, 30 Apr 2010) Log Message: ----------- Leave in some extra debugging information related to fonts. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/font_manager.py trunk/matplotlib/lib/matplotlib/mathtext.py Modified: trunk/matplotlib/lib/matplotlib/font_manager.py =================================================================== --- trunk/matplotlib/lib/matplotlib/font_manager.py 2010-04-30 14:41:40 UTC (rev 8290) +++ trunk/matplotlib/lib/matplotlib/font_manager.py 2010-04-30 16:54:10 UTC (rev 8291) @@ -397,6 +397,11 @@ except ValueError: self.size = size + def __repr__(self): + return "<Font '%s' (%s) %s %s %s %s>" % ( + self.name, os.path.basename(self.fname), self.style, self.variant, + self.weight, self.stretch) + def ttfFontProperty(font): """ Modified: trunk/matplotlib/lib/matplotlib/mathtext.py =================================================================== --- trunk/matplotlib/lib/matplotlib/mathtext.py 2010-04-30 14:41:40 UTC (rev 8290) +++ trunk/matplotlib/lib/matplotlib/mathtext.py 2010-04-30 16:54:10 UTC (rev 8291) @@ -849,11 +849,11 @@ fontname, uniindex = self._map_virtual_font( fontname, font_class, uniindex) + new_fontname = fontname + # Only characters in the "Letter" class should be italicized in 'it' # mode. Greek capital letters should be Roman. if found_symbol: - new_fontname = fontname - if fontname == 'it': if uniindex < 0x10000: unistring = unichr(uniindex) @@ -883,8 +883,8 @@ else: if fontname in ('it', 'regular') and isinstance(self, StixFonts): return self._get_glyph('rm', font_class, sym, fontsize) - warn("Font '%s' does not have a glyph for '%s'" % - (fontname, sym.encode('ascii', 'backslashreplace')), + warn("Font '%s' does not have a glyph for '%s' [U%x]" % + (new_fontname, sym.encode('ascii', 'backslashreplace'), uniindex), MathTextWarning) warn("Substituting with a dummy symbol.", MathTextWarning) fontname = 'rm' This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <md...@us...> - 2010-05-03 18:37:45
|
Revision: 8292 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8292&view=rev Author: mdboom Date: 2010-05-03 18:37:38 +0000 (Mon, 03 May 2010) Log Message: ----------- Change "import numpy as npy" to common convention "import numpy as np" Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/backends/backend_agg.py trunk/matplotlib/lib/matplotlib/backends/backend_cairo.py trunk/matplotlib/lib/matplotlib/backends/backend_gdk.py trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py trunk/matplotlib/lib/matplotlib/backends/backend_ps.py trunk/matplotlib/lib/matplotlib/backends/backend_wx.py trunk/matplotlib/lib/matplotlib/mathtext.py trunk/matplotlib/lib/matplotlib/projections/polar.py Modified: trunk/matplotlib/lib/matplotlib/backends/backend_agg.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_agg.py 2010-04-30 16:54:10 UTC (rev 8291) +++ trunk/matplotlib/lib/matplotlib/backends/backend_agg.py 2010-05-03 18:37:38 UTC (rev 8292) @@ -22,7 +22,7 @@ """ from __future__ import division -import numpy as npy +import numpy as np from matplotlib import verbose, rcParams from matplotlib.backend_bases import RendererBase,\ @@ -99,10 +99,10 @@ npts = path.vertices.shape[0] if (nmax > 100 and npts > nmax and path.should_simplify and rgbFace is None and gc.get_hatch() is None): - nch = npy.ceil(npts/float(nmax)) - chsize = int(npy.ceil(npts/nch)) - i0 = npy.arange(0, npts, chsize) - i1 = npy.zeros_like(i0) + nch = np.ceil(npts/float(nmax)) + chsize = int(np.ceil(npts/nch)) + i0 = np.arange(0, npts, chsize) + i1 = np.zeros_like(i0) i1[:-1] = i0[1:] - 1 i1[-1] = npts for ii0, ii1 in zip(i0, i1): @@ -196,7 +196,7 @@ im = self.texd.get(key) if im is None: Z = texmanager.get_grey(s, size, self.dpi) - Z = npy.array(Z * 255.0, npy.uint8) + Z = np.array(Z * 255.0, np.uint8) self._renderer.draw_text_image(Z, x, y, angle, gc) @@ -339,7 +339,7 @@ self._update_methods() if w > 0 and h > 0: - img = npy.fromstring(buffer, npy.uint8) + img = np.fromstring(buffer, np.uint8) img, ox, oy = post_processing(img.reshape((h, w, 4)) / 255., self.dpi) image = fromarray(img, 1) Modified: trunk/matplotlib/lib/matplotlib/backends/backend_cairo.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_cairo.py 2010-04-30 16:54:10 UTC (rev 8291) +++ trunk/matplotlib/lib/matplotlib/backends/backend_cairo.py 2010-05-03 18:37:38 UTC (rev 8292) @@ -21,7 +21,7 @@ from __future__ import division import os, sys, warnings, gzip -import numpy as npy +import numpy as np def _fn_name(): return sys._getframe(1).f_code.co_name @@ -196,7 +196,7 @@ ctx.save() if angle: - ctx.rotate (-angle * npy.pi / 180) + ctx.rotate (-angle * np.pi / 180) ctx.set_font_size (size) ctx.show_text (s.encode("utf-8")) ctx.restore() @@ -211,7 +211,7 @@ ctx.save() ctx.translate(x, y) if angle: - ctx.rotate (-angle * npy.pi / 180) + ctx.rotate (-angle * np.pi / 180) for font, fontsize, s, ox, oy in glyphs: ctx.new_path() @@ -355,7 +355,7 @@ self.ctx.set_dash([], 0) # switch dashes off else: self.ctx.set_dash ( - self.renderer.points_to_pixels (npy.asarray(dashes)), offset) + self.renderer.points_to_pixels (np.asarray(dashes)), offset) def set_foreground(self, fg, isRGB=None): @@ -469,7 +469,7 @@ ctx = renderer.gc.ctx if orientation == 'landscape': - ctx.rotate (npy.pi/2) + ctx.rotate (np.pi/2) ctx.translate (0, -height_in_points) # cairo/src/cairo_ps_surface.c # '%%Orientation: Portrait' is always written to the file header Modified: trunk/matplotlib/lib/matplotlib/backends/backend_gdk.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_gdk.py 2010-04-30 16:54:10 UTC (rev 8291) +++ trunk/matplotlib/lib/matplotlib/backends/backend_gdk.py 2010-05-03 18:37:38 UTC (rev 8292) @@ -16,7 +16,7 @@ % (gtk.pygtk_version + pygtk_version_required)) del pygtk_version_required -import numpy as npy +import numpy as np import matplotlib from matplotlib._pylab_helpers import Gcf @@ -109,7 +109,7 @@ im.flipud_out() rows, cols, image_str = im.as_rgba_str() - image_array = npy.fromstring(image_str, npy.uint8) + image_array = np.fromstring(image_str, np.uint8) image_array.shape = rows, cols, 4 pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, @@ -174,13 +174,13 @@ N = imw * imh # a numpixels by num fonts array - Xall = npy.zeros((N,1), npy.uint8) + Xall = np.zeros((N,1), np.uint8) image_str = font_image.as_str() - Xall[:,0] = npy.fromstring(image_str, npy.uint8) + Xall[:,0] = np.fromstring(image_str, np.uint8) # get the max alpha at each pixel - Xs = npy.amax(Xall,axis=1) + Xs = np.amax(Xall,axis=1) # convert it to it's proper shape Xs.shape = imh, imw @@ -381,7 +381,7 @@ if dash_list == None: self.gdkGC.line_style = gdk.LINE_SOLID else: - pixels = self.renderer.points_to_pixels(npy.asarray(dash_list)) + pixels = self.renderer.points_to_pixels(np.asarray(dash_list)) dl = [max(1, int(round(val))) for val in pixels] self.gdkGC.set_dashes(dash_offset, dl) self.gdkGC.line_style = gdk.LINE_ON_OFF_DASH Modified: trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py 2010-04-30 16:54:10 UTC (rev 8291) +++ trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py 2010-05-03 18:37:38 UTC (rev 8292) @@ -13,7 +13,7 @@ import warnings import zlib -import numpy as npy +import numpy as np from cStringIO import StringIO from datetime import datetime @@ -136,7 +136,7 @@ # need to use %f with some precision. Perhaps the precision # should adapt to the magnitude of the number? elif isinstance(obj, float): - if not npy.isfinite(obj): + if not np.isfinite(obj): raise ValueError, "Can only output finite numbers in PDF" r = "%.10f" % obj return r.rstrip('0').rstrip('.') @@ -1088,8 +1088,8 @@ shape = points.shape flat_points = points.reshape((shape[0] * shape[1], 2)) flat_colors = colors.reshape((shape[0] * shape[1], 4)) - points_min = npy.min(flat_points, axis=0) - (1 << 8) - points_max = npy.max(flat_points, axis=0) + (1 << 8) + points_min = np.min(flat_points, axis=0) - (1 << 8) + points_max = np.max(flat_points, axis=0) + (1 << 8) factor = float(0xffffffff) / (points_max - points_min) self.beginStream( @@ -1105,7 +1105,7 @@ 0, 1, 0, 1, 0, 1] }) - streamarr = npy.empty( + streamarr = np.empty( (shape[0] * shape[1],), dtype=[('flags', 'u1'), ('points', '>u4', (2,)), @@ -1137,7 +1137,7 @@ def _rgb(self, im): h,w,s = im.as_rgba_str() - rgba = npy.fromstring(s, npy.uint8) + rgba = np.fromstring(s, np.uint8) rgba.shape = (h, w, 4) rgb = rgba[:,:,:3] a = rgba[:,:,3:] @@ -1145,13 +1145,13 @@ def _gray(self, im, rc=0.3, gc=0.59, bc=0.11): rgbat = im.as_rgba_str() - rgba = npy.fromstring(rgbat[2], npy.uint8) + rgba = np.fromstring(rgbat[2], np.uint8) rgba.shape = (rgbat[0], rgbat[1], 4) - rgba_f = rgba.astype(npy.float32) + rgba_f = rgba.astype(np.float32) r = rgba_f[:,:,0] g = rgba_f[:,:,1] b = rgba_f[:,:,2] - gray = (r*rc + g*gc + b*bc).astype(npy.uint8) + gray = (r*rc + g*gc + b*bc).astype(np.uint8) return rgbat[0], rgbat[1], gray.tostring() def writeImages(self): @@ -2005,9 +2005,9 @@ try: different = bool(ours != theirs) except ValueError: - ours = npy.asarray(ours) - theirs = npy.asarray(theirs) - different = ours.shape != theirs.shape or npy.any(ours != theirs) + ours = np.asarray(ours) + theirs = np.asarray(theirs) + different = ours.shape != theirs.shape or np.any(ours != theirs) if different: break Modified: trunk/matplotlib/lib/matplotlib/backends/backend_ps.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_ps.py 2010-04-30 16:54:10 UTC (rev 8291) +++ trunk/matplotlib/lib/matplotlib/backends/backend_ps.py 2010-05-03 18:37:38 UTC (rev 8292) @@ -36,7 +36,7 @@ from matplotlib.backends.backend_mixed import MixedModeRenderer -import numpy as npy +import numpy as np import binascii import re try: @@ -127,7 +127,7 @@ #ok, neither are None:, assuming iterable if len(seq1) != len(seq2): return False - return npy.alltrue(npy.equal(seq1, seq2)) + return np.alltrue(np.equal(seq1, seq2)) class RendererPS(RendererBase): @@ -348,20 +348,20 @@ def _rgb(self, im): h,w,s = im.as_rgba_str() - rgba = npy.fromstring(s, npy.uint8) + rgba = np.fromstring(s, np.uint8) rgba.shape = (h, w, 4) rgb = rgba[:,:,:3] return h, w, rgb.tostring() def _gray(self, im, rc=0.3, gc=0.59, bc=0.11): rgbat = im.as_rgba_str() - rgba = npy.fromstring(rgbat[2], npy.uint8) + rgba = np.fromstring(rgbat[2], np.uint8) rgba.shape = (rgbat[0], rgbat[1], 4) - rgba_f = rgba.astype(npy.float32) + rgba_f = rgba.astype(np.float32) r = rgba_f[:,:,0] g = rgba_f[:,:,1] b = rgba_f[:,:,2] - gray = (r*rc + g*gc + b*bc).astype(npy.uint8) + gray = (r*rc + g*gc + b*bc).astype(np.uint8) return rgbat[0], rgbat[1], gray.tostring() def _hex_lines(self, s, chars_per_line=128): @@ -811,14 +811,14 @@ shape = points.shape flat_points = points.reshape((shape[0] * shape[1], 2)) flat_colors = colors.reshape((shape[0] * shape[1], 4)) - points_min = npy.min(flat_points, axis=0) - (1 << 8) - points_max = npy.max(flat_points, axis=0) + (1 << 8) + points_min = np.min(flat_points, axis=0) - (1 << 8) + points_max = np.max(flat_points, axis=0) + (1 << 8) factor = float(0xffffffff) / (points_max - points_min) xmin, ymin = points_min xmax, ymax = points_max - streamarr = npy.empty( + streamarr = np.empty( (shape[0] * shape[1],), dtype=[('flags', 'u1'), ('points', '>u4', (2,)), @@ -1492,7 +1492,7 @@ return a postscript header stringfor the given bbox (l, b, r, t) """ - bbox_info = '%%%%BoundingBox: %d %d %d %d' % (l, b, npy.ceil(r), npy.ceil(t)) + bbox_info = '%%%%BoundingBox: %d %d %d %d' % (l, b, np.ceil(r), np.ceil(t)) hires_bbox_info = '%%%%HiResBoundingBox: %.6f %.6f %.6f %.6f' % (l, b, r, t) return '\n'.join([bbox_info, hires_bbox_info]) @@ -1537,7 +1537,7 @@ dy = (bbox[3]-bbox[1])/2 l,b,r,t = (x-dx, y-dy, x+dx, y+dy) - bbox_info = '%%%%BoundingBox: %d %d %d %d' % (l, b, npy.ceil(r), npy.ceil(t)) + bbox_info = '%%%%BoundingBox: %d %d %d %d' % (l, b, np.ceil(r), np.ceil(t)) hires_bbox_info = '%%%%HiResBoundingBox: %.6f %.6f %.6f %.6f' % (l, b, r, t) return '\n'.join([bbox_info, hires_bbox_info]) Modified: trunk/matplotlib/lib/matplotlib/backends/backend_wx.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_wx.py 2010-04-30 16:54:10 UTC (rev 8291) +++ trunk/matplotlib/lib/matplotlib/backends/backend_wx.py 2010-05-03 18:37:38 UTC (rev 8292) @@ -96,7 +96,7 @@ import sys, os, os.path, math, StringIO, weakref, warnings -import numpy as npy +import numpy as np # Debugging settings here... # Debug level set here. If the debug level is less than 5, information @@ -417,7 +417,7 @@ w=self.width h=self.height rows, cols, image_str = im.as_rgba_str() - image_array = npy.fromstring(image_str, npy.uint8) + image_array = np.fromstring(image_str, np.uint8) image_array.shape = rows, cols, 4 bitmap = wx.BitmapFromBufferRGBA(cols,rows,image_array) gc = self.get_gc() Modified: trunk/matplotlib/lib/matplotlib/mathtext.py =================================================================== --- trunk/matplotlib/lib/matplotlib/mathtext.py 2010-04-30 16:54:10 UTC (rev 8291) +++ trunk/matplotlib/lib/matplotlib/mathtext.py 2010-05-03 18:37:38 UTC (rev 8292) @@ -3033,7 +3033,6 @@ Returns the offset of the baseline from the bottom of the image in pixels. """ - rgba, depth = self.to_rgba(texstr, color=color, dpi=dpi, fontsize=fontsize) numrows, numcols, tmp = rgba.shape _png.write_png(rgba.tostring(), numcols, numrows, filename) Modified: trunk/matplotlib/lib/matplotlib/projections/polar.py =================================================================== --- trunk/matplotlib/lib/matplotlib/projections/polar.py 2010-04-30 16:54:10 UTC (rev 8291) +++ trunk/matplotlib/lib/matplotlib/projections/polar.py 2010-05-03 18:37:38 UTC (rev 8292) @@ -1,7 +1,7 @@ import math import warnings -import numpy as npy +import numpy as np import matplotlib rcParams = matplotlib.rcParams @@ -36,13 +36,13 @@ is_separable = False def transform(self, tr): - xy = npy.zeros(tr.shape, npy.float_) + xy = np.zeros(tr.shape, np.float_) t = tr[:, 0:1] r = tr[:, 1:2] x = xy[:, 0:1] y = xy[:, 1:2] - x[:] = r * npy.cos(t) - y[:] = r * npy.sin(t) + x[:] = r * np.cos(t) + y[:] = r * np.sin(t) return xy transform.__doc__ = Transform.transform.__doc__ @@ -106,10 +106,10 @@ def transform(self, xy): x = xy[:, 0:1] y = xy[:, 1:] - r = npy.sqrt(x*x + y*y) - theta = npy.arccos(x / r) - theta = npy.where(y < 0, 2 * npy.pi - theta, theta) - return npy.concatenate((theta, r), 1) + r = np.sqrt(x*x + y*y) + theta = np.arccos(x / r) + theta = np.where(y < 0, 2 * np.pi - theta, theta) + return np.concatenate((theta, r), 1) transform.__doc__ = Transform.transform.__doc__ def inverted(self): @@ -125,14 +125,14 @@ def __call__(self, x, pos=None): # \u00b0 : degree symbol if rcParams['text.usetex'] and not rcParams['text.latex.unicode']: - return r"$%0.0f^\circ$" % ((x / npy.pi) * 180.0) + return r"$%0.0f^\circ$" % ((x / np.pi) * 180.0) else: # we use unicode, rather than mathtext with \circ, so # that it will work correctly with any arbitrary font # (assuming it has a degree sign), whereas $5\circ$ # will only work correctly with one of the supported # math fonts (Computer Modern and STIX) - return u"%0.0f\u00b0" % ((x / npy.pi) * 180.0) + return u"%0.0f\u00b0" % ((x / np.pi) * 180.0) class RadialLocator(Locator): """ @@ -196,7 +196,7 @@ self.title.set_y(1.05) self.xaxis.set_major_formatter(self.ThetaFormatter()) - angles = npy.arange(0.0, 360.0, 45.0) + angles = np.arange(0.0, 360.0, 45.0) self.set_thetagrids(angles) self.yaxis.set_major_locator(self.RadialLocator(self.yaxis.get_major_locator())) @@ -254,7 +254,7 @@ # axis so the gridlines from 0.0 to 1.0, now go from 0.0 to # 2pi. self._yaxis_transform = ( - Affine2D().scale(npy.pi * 2.0, 1.0) + + Affine2D().scale(np.pi * 2.0, 1.0) + self.transData) # The r-axis labels are put at an angle and padded in the r-direction self._r_label1_position = Affine2D().translate(22.5, self._rpad) @@ -344,8 +344,8 @@ ACCEPTS: sequence of floats """ - angles = npy.asarray(angles, npy.float_) - self.set_xticks(angles * (npy.pi / 180.0)) + angles = np.asarray(angles, np.float_) + self.set_xticks(angles * (np.pi / 180.0)) if labels is not None: self.set_xticklabels(labels) elif fmt is not None: @@ -384,7 +384,7 @@ ACCEPTS: sequence of floats """ - radii = npy.asarray(radii) + radii = np.asarray(radii) rmin = radii.min() if rmin <= 0: raise ValueError('radial grids must be strictly positive') @@ -411,7 +411,7 @@ def set_xlim(self, *args, **kargs): # The xlim is fixed, no matter what you do - self.viewLim.intervalx = (0.0, npy.pi * 2.0) + self.viewLim.intervalx = (0.0, np.pi * 2.0) def format_coord(self, theta, r): """ @@ -440,10 +440,10 @@ return False def start_pan(self, x, y, button): - angle = self._r_label1_position.to_values()[4] / 180.0 * npy.pi + angle = self._r_label1_position.to_values()[4] / 180.0 * np.pi mode = '' if button == 1: - epsilon = npy.pi / 45.0 + epsilon = np.pi / 45.0 t, r = self.transData.inverted().transform_point((x, y)) if t >= angle - epsilon and t <= angle + epsilon: mode = 'drag_r_labels' @@ -477,7 +477,7 @@ dt = abs(dt1) * sign(dt0) * -1.0 else: dt = dt0 * -1.0 - dt = (dt / npy.pi) * 180.0 + dt = (dt / np.pi) * 180.0 rpad = self._r_label1_position.to_values()[5] self._r_label1_position.clear().translate( @@ -499,26 +499,26 @@ # cubic bezier curves. # def transform_path(self, path): -# twopi = 2.0 * npy.pi -# halfpi = 0.5 * npy.pi +# twopi = 2.0 * np.pi +# halfpi = 0.5 * np.pi # vertices = path.vertices # t0 = vertices[0:-1, 0] # t1 = vertices[1: , 0] -# td = npy.where(t1 > t0, t1 - t0, twopi - (t0 - t1)) +# td = np.where(t1 > t0, t1 - t0, twopi - (t0 - t1)) # maxtd = td.max() -# interpolate = npy.ceil(maxtd / halfpi) +# interpolate = np.ceil(maxtd / halfpi) # if interpolate > 1.0: # vertices = self.interpolate(vertices, interpolate) # vertices = self.transform(vertices) -# result = npy.zeros((len(vertices) * 3 - 2, 2), npy.float_) -# codes = mpath.Path.CURVE4 * npy.ones((len(vertices) * 3 - 2, ), mpath.Path.code_type) +# result = np.zeros((len(vertices) * 3 - 2, 2), np.float_) +# codes = mpath.Path.CURVE4 * np.ones((len(vertices) * 3 - 2, ), mpath.Path.code_type) # result[0] = vertices[0] # codes[0] = mpath.Path.MOVETO -# kappa = 4.0 * ((npy.sqrt(2.0) - 1.0) / 3.0) +# kappa = 4.0 * ((np.sqrt(2.0) - 1.0) / 3.0) # kappa = 0.5 # p0 = vertices[0:-1] @@ -556,36 +556,36 @@ # return mpath.Path(result, codes) -# twopi = 2.0 * npy.pi -# halfpi = 0.5 * npy.pi +# twopi = 2.0 * np.pi +# halfpi = 0.5 * np.pi # vertices = path.vertices # t0 = vertices[0:-1, 0] # t1 = vertices[1: , 0] -# td = npy.where(t1 > t0, t1 - t0, twopi - (t0 - t1)) +# td = np.where(t1 > t0, t1 - t0, twopi - (t0 - t1)) # maxtd = td.max() -# interpolate = npy.ceil(maxtd / halfpi) +# interpolate = np.ceil(maxtd / halfpi) # print "interpolate", interpolate # if interpolate > 1.0: # vertices = self.interpolate(vertices, interpolate) -# result = npy.zeros((len(vertices) * 3 - 2, 2), npy.float_) -# codes = mpath.Path.CURVE4 * npy.ones((len(vertices) * 3 - 2, ), mpath.Path.code_type) +# result = np.zeros((len(vertices) * 3 - 2, 2), np.float_) +# codes = mpath.Path.CURVE4 * np.ones((len(vertices) * 3 - 2, ), mpath.Path.code_type) # result[0] = vertices[0] # codes[0] = mpath.Path.MOVETO -# kappa = 4.0 * ((npy.sqrt(2.0) - 1.0) / 3.0) -# tkappa = npy.arctan(kappa) -# hyp_kappa = npy.sqrt(kappa*kappa + 1.0) +# kappa = 4.0 * ((np.sqrt(2.0) - 1.0) / 3.0) +# tkappa = np.arctan(kappa) +# hyp_kappa = np.sqrt(kappa*kappa + 1.0) # t0 = vertices[0:-1, 0] # t1 = vertices[1: , 0] # r0 = vertices[0:-1, 1] # r1 = vertices[1: , 1] -# td = npy.where(t1 > t0, t1 - t0, twopi - (t0 - t1)) -# td_scaled = td / (npy.pi * 0.5) +# td = np.where(t1 > t0, t1 - t0, twopi - (t0 - t1)) +# td_scaled = td / (np.pi * 0.5) # rd = r1 - r0 # r0kappa = r0 * kappa * td_scaled # r1kappa = r1 * kappa * td_scaled @@ -593,11 +593,11 @@ # result[1::3, 0] = t0 + (tkappa * td_scaled) # result[1::3, 1] = r0*hyp_kappa -# # result[1::3, 1] = r0 / npy.cos(tkappa * td_scaled) # npy.sqrt(r0*r0 + ravg_kappa*ravg_kappa) +# # result[1::3, 1] = r0 / np.cos(tkappa * td_scaled) # np.sqrt(r0*r0 + ravg_kappa*ravg_kappa) # result[2::3, 0] = t1 - (tkappa * td_scaled) # result[2::3, 1] = r1*hyp_kappa -# # result[2::3, 1] = r1 / npy.cos(tkappa * td_scaled) # npy.sqrt(r1*r1 + ravg_kappa*ravg_kappa) +# # result[2::3, 1] = r1 / np.cos(tkappa * td_scaled) # np.sqrt(r1*r1 + ravg_kappa*ravg_kappa) # result[3::3, 0] = t1 # result[3::3, 1] = r1 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lee...@us...> - 2010-05-19 00:32:25
|
Revision: 8320 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8320&view=rev Author: leejjoon Date: 2010-05-19 00:32:18 +0000 (Wed, 19 May 2010) Log Message: ----------- merge mpl_toolkits.gridspec into the main tree Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/axes.py trunk/matplotlib/lib/matplotlib/pyplot.py Added Paths: ----------- trunk/matplotlib/lib/matplotlib/gridspec.py Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2010-05-18 17:14:45 UTC (rev 8319) +++ trunk/matplotlib/lib/matplotlib/axes.py 2010-05-19 00:32:18 UTC (rev 8320) @@ -8039,6 +8039,8 @@ triplot.__doc__ = mtri.triplot.__doc__ +from gridspec import GridSpec, SubplotSpec + class SubplotBase: """ Base class for subplots, which are :class:`Axes` instances with @@ -8062,92 +8064,63 @@ self.figure = fig - if len(args)==1: - s = str(args[0]) - if len(s) != 3: - raise ValueError('Argument to subplot must be a 3 digits long') - rows, cols, num = map(int, s) + if len(args) == 1: + if isinstance(args[0], SubplotSpec): + self._subplotspec = args[0] + + else: + s = str(args[0]) + if len(s) != 3: + raise ValueError('Argument to subplot must be a 3 digits long') + rows, cols, num = map(int, s) + self._subplotspec = GridSpec(rows, cols)[num-1] + # num - 1 for converting from matlab to python indexing elif len(args)==3: rows, cols, num = args + if isinstance(num, tuple) and len(num) == 2: + self._subplotspec = GridSpec(rows, cols)[num[0]-1:num[1]] + else: + self._subplotspec = GridSpec(rows, cols)[num-1] + # num - 1 for converting from matlab to python indexing else: raise ValueError( 'Illegal argument to subplot') - total = rows*cols - num -= 1 # convert from matlab to python indexing - # ie num in range(0,total) - if num >= total: - raise ValueError( 'Subplot number exceeds total subplots') - self._rows = rows - self._cols = cols - self._num = num - self.update_params() # _axes_class is set in the subplot_class_factory self._axes_class.__init__(self, fig, self.figbox, **kwargs) + + def get_geometry(self): 'get the subplot geometry, eg 2,2,3' - return self._rows, self._cols, self._num+1 + rows, cols, num1, num2 = self.get_subplotspec().get_geometry() + return rows, cols, num1+1 # for compatibility # COVERAGE NOTE: Never used internally or from examples def change_geometry(self, numrows, numcols, num): 'change subplot geometry, eg. from 1,1,1 to 2,2,3' - self._rows = numrows - self._cols = numcols - self._num = num-1 + self._subplotspec = GridSpec(numrows, numcols)[num-1] self.update_params() self.set_position(self.figbox) + def get_subplotspec(self): + 'get the SubplotSpec instance associated with the subplot' + return self._subplotspec + + def set_subplotspec(self, subplotspec): + 'set the SubplotSpec instance associated with the subplot' + self._subplotspec = subplotspec + def update_params(self): 'update the subplot position from fig.subplotpars' - rows = self._rows - cols = self._cols - num = self._num + self.figbox, self.rowNum, self.colNum, self.numRows, self.numCols = \ + self.get_subplotspec().get_position(self.figure, + return_all=True) - pars = self.figure.subplotpars - left = pars.left - right = pars.right - bottom = pars.bottom - top = pars.top - wspace = pars.wspace - hspace = pars.hspace - totWidth = right-left - totHeight = top-bottom - figH = totHeight/(rows + hspace*(rows-1)) - sepH = hspace*figH - - figW = totWidth/(cols + wspace*(cols-1)) - sepW = wspace*figW - - rowNum, colNum = divmod(num, cols) - - figBottom = top - (rowNum+1)*figH - rowNum*sepH - figLeft = left + colNum*(figW + sepW) - - self.figbox = mtransforms.Bbox.from_bounds(figLeft, figBottom, - figW, figH) - self.rowNum = rowNum - self.colNum = colNum - self.numRows = rows - self.numCols = cols - - if 0: - print 'rcn', rows, cols, num - print 'lbrt', left, bottom, right, top - print 'self.figBottom', self.figBottom - print 'self.figLeft', self.figLeft - print 'self.figW', self.figW - print 'self.figH', self.figH - print 'self.rowNum', self.rowNum - print 'self.colNum', self.colNum - print 'self.numRows', self.numRows - print 'self.numCols', self.numCols - - def is_first_col(self): return self.colNum==0 Added: trunk/matplotlib/lib/matplotlib/gridspec.py =================================================================== --- trunk/matplotlib/lib/matplotlib/gridspec.py (rev 0) +++ trunk/matplotlib/lib/matplotlib/gridspec.py 2010-05-19 00:32:18 UTC (rev 8320) @@ -0,0 +1,298 @@ +""" +:mod:`~matplotlib.gridspec` is a module which specifies the location +of the subplot in the figure. + + ``GridSpec`` + specifies the geometry of the grid that a subplot will be + placed. The number of rows and number of columns of the grid + need to be set. Optionally, the subplot layout parameters + (e.g., left, right, etc.) can be tuned. + + ``SubplotSpec`` + specifies the location of the subplot in the given *GridSpec*. + + +""" + +from __future__ import division + +import matplotlib +rcParams = matplotlib.rcParams + +import matplotlib.transforms as mtransforms + + +class GridSpec(object): + """ + A class that specifies the geometry of the grid that a subplot + will be placed. + """ + def __init__(self, nrows, ncols, + left=None, bottom=None, right=None, top=None, + wspace=None, hspace=None): + """ + The number of rows and number of columns of the + grid need to be set. Optionally, the subplot layout parameters + (e.g., left, right, etc.) can be tuned. + """ + #self.figure = figure + self._nrows , self._ncols = nrows, ncols + self.left=left + self.bottom=bottom + self.right=right + self.top=top + self.wspace=wspace + self.hspace=hspace + + def get_geometry(self): + 'get the geometry of the grid, eg 2,3' + return self._nrows, self._ncols + + _AllowedKeys = ["left", "bottom", "right", "top", "wspace", "hspace"] + + def update(self, **kwargs): + """ + Update the current values. If any kwarg is None, default to + the current value, if set, otherwise to rc. + """ + + for k, v in kwargs.items(): + if k in self._AllowedKeys: + setattr(self, k, v) + else: + raise AttributeError("%s is unknown keyword" % (k,)) + + + from matplotlib import _pylab_helpers + from matplotlib.axes import SubplotBase + for figmanager in _pylab_helpers.Gcf.figs.values(): + for ax in figmanager.canvas.figure.axes: + # copied from Figure.subplots_adjust + if not isinstance(ax, SubplotBase): + # Check if sharing a subplots axis + if ax._sharex is not None and isinstance(ax._sharex, SubplotBase): + ax._sharex.update_params() + ax.set_position(ax._sharex.figbox) + elif ax._sharey is not None and isinstance(ax._sharey,SubplotBase): + ax._sharey.update_params() + ax.set_position(ax._sharey.figbox) + else: + ax.update_params() + ax.set_position(ax.figbox) + + + def get_subplot_params(self, fig=None): + """ + return a dictionary of subplot layout parameters. The default + parameters are from rcParams unless a figure attribute is set. + """ + from matplotlib.figure import SubplotParams + import copy + if fig is None: + kw = dict([(k, rcParams["figure.subplot."+k]) \ + for k in self._AllowedKeys]) + subplotpars = SubplotParams(**kw) + else: + subplotpars = copy.copy(fig.subplotpars) + + update_kw = dict([(k, getattr(self, k)) for k in self._AllowedKeys]) + subplotpars.update(**update_kw) + + return subplotpars + + + def new_subplotspec(self, loc, rowspan=1, colspan=1): + """ + create and return a SuplotSpec instance. + """ + loc1, loc2 = loc + subplotspec = self[loc1:loc1+rowspan, loc2:loc2+colspan] + return subplotspec + + + def __getitem__(self, key): + """ + create and return a SuplotSpec instance. + """ + nrows, ncols = self.get_geometry() + total = nrows*ncols + + if isinstance(key, tuple): + try: + k1, k2 = key + except ValueError: + raise ValueError("unrecognized subplot spec") + + if isinstance(k1, slice): + row1, row2, _ = k1.indices(nrows) + else: + if k1 < 0: + k1 += nrows + row1, row2 = k1, k1+1 + + + if isinstance(k2, slice): + col1, col2, _ = k2.indices(ncols) + else: + if k2 < 0: + k2 += ncols + col1, col2 = k2, k2+1 + + + num1 = row1*nrows + col1 + num2 = (row2-1)*nrows + (col2-1) + + # single key + else: + if isinstance(key, slice): + num1, num2, _ = key.indices(total) + num2 -= 1 + else: + if key < 0: + key += total + num1, num2 = key, None + + + return SubplotSpec(self, num1, num2) + + +class GridSpecFromSubplotSpec(GridSpec): + """ + GridSpec whose subplot layout parameters are inherited from the + location specified by a given SubplotSpec. + """ + def __init__(self, nrows, ncols, + subplot_spec, + wspace=None, hspace=None): + """ + The number of rows and number of columns of the grid need to + be set. An instance of SubplotSpec is also need to be set from + which the layout parameters will be inheirted. The wspace and + hspace of the layout can be optionally specified or the + default values (from the figure or rcParams) will be used. + """ + self._nrows , self._ncols = nrows, ncols + self._wspace=wspace + self._hspace=hspace + + self._subplot_spec = subplot_spec + + def get_subplot_params(self, fig=None): + + if fig is None: + hspace = rcParams["figure.subplot.hspace"] + wspace = rcParams["figure.subplot.wspace"] + else: + hspace = fig.subplotpars.hspace + wspace = fig.subplotpars.wspace + + if self._hspace is not None: + hspace = self._hspace + + if self._wspace is not None: + wspace = self._wspace + + figbox = self._subplot_spec.get_position(fig, return_all=False) + + left, bottom, right, top = figbox.extents + + from matplotlib.figure import SubplotParams + sp = SubplotParams(left=left, + right=right, + bottom=bottom, + top=top, + wspace=wspace, + hspace=hspace) + + return sp + + + + +class SubplotSpec(object): + """ + specifies the location of the subplot in the given *GridSpec*. + """ + + def __init__(self, gridspec, num1, num2=None): + """ + The subplot will occupy the num1-th cell of the given + gridspec. If num2 is provided, the subplot will span between + num1-th cell and num2-th cell. + + The index stars from 0. + """ + + rows, cols = gridspec.get_geometry() + total = rows*cols + + self._gridspec = gridspec + self.num1 = num1 + self.num2 = num2 + + def get_gridspec(self): + return self._gridspec + + + def get_geometry(self): + """ + get the subplot geometry, eg 2,2,3. Unlike SuplorParams, + index is 0-based + """ + rows, cols = self.get_gridspec().get_geometry() + return rows, cols, self.num1, self.num2 + + + def get_position(self, fig, return_all=False): + """ + update the subplot position from fig.subplotpars + """ + + gridspec = self.get_gridspec() + rows, cols = gridspec.get_geometry() + + subplot_params = gridspec.get_subplot_params(fig) + left = subplot_params.left + right = subplot_params.right + bottom = subplot_params.bottom + top = subplot_params.top + wspace = subplot_params.wspace + hspace = subplot_params.hspace + totWidth = right-left + totHeight = top-bottom + + figH = totHeight/(rows + hspace*(rows-1)) + sepH = hspace*figH + + figW = totWidth/(cols + wspace*(cols-1)) + sepW = wspace*figW + + rowNum, colNum = divmod(self.num1, cols) + figBottom = top - (rowNum+1)*figH - rowNum*sepH + figLeft = left + colNum*(figW + sepW) + figTop = figBottom + figH + figRight = figLeft + figW + + if self.num2 is not None: + + rowNum2, colNum2 = divmod(self.num2, cols) + figBottom2 = top - (rowNum2+1)*figH - rowNum2*sepH + figLeft2 = left + colNum2*(figW + sepW) + figTop2 = figBottom2 + figH + figRight2 = figLeft2 + figW + + figBottom = min(figBottom, figBottom2) + figLeft = min(figLeft, figLeft2) + figTop = max(figTop, figTop2) + figRight = max(figRight, figRight2) + + figbox = mtransforms.Bbox.from_extents(figLeft, figBottom, + figRight, figTop) + + + if return_all: + return figbox, rowNum, colNum, rows, cols + else: + return figbox + + Modified: trunk/matplotlib/lib/matplotlib/pyplot.py =================================================================== --- trunk/matplotlib/lib/matplotlib/pyplot.py 2010-05-18 17:14:45 UTC (rev 8319) +++ trunk/matplotlib/lib/matplotlib/pyplot.py 2010-05-19 00:32:18 UTC (rev 8320) @@ -12,7 +12,7 @@ from matplotlib.rcsetup import interactive_bk as _interactive_bk from matplotlib.artist import getp, get, Artist from matplotlib.artist import setp as _setp -from matplotlib.axes import Axes +from matplotlib.axes import Axes, Subplot from matplotlib.projections import PolarAxes from matplotlib import mlab # for csv2rec, detrend_none, window_hanning from matplotlib.scale import get_scale_docs, get_scale_names @@ -764,6 +764,44 @@ return fig, axarr.reshape(nrows, ncols) +from gridspec import GridSpec +def subplot2grid(shape, loc, rowspan=1, colspan=1, **kwargs): + """ + + It creates a subplot in a grid of *shape*, at location of *loc*, + spanning *rowspan*, *colspan* cells in each direction. + The index for loc is 0-based. :: + + subplot2grid(shape, loc, rowspan=1, colspan=1) + + is identical to :: + + gridspec=GridSpec(shape[0], shape[2]) + subplotspec=gridspec.new_subplotspec(loc, rowspan, colspan) + subplot(subplotspec) + + + """ + + fig = gcf() + s1, s2 = shape + subplotspec = GridSpec(s1, s2).new_subplotspec(loc, + rowspan=rowspan, + colspan=colspan) + a = Subplot(fig, subplotspec, **kwargs) + fig.add_subplot(a) + bbox = a.bbox + byebye = [] + for other in fig.axes: + if other==a: continue + if bbox.fully_overlaps(other.bbox): + byebye.append(other) + for ax in byebye: delaxes(ax) + + draw_if_interactive() + return a + + def twinx(ax=None): """ Make a second axes overlay *ax* (or the current axes if *ax* is This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <md...@us...> - 2010-05-20 16:20:00
|
Revision: 8328 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8328&view=rev Author: mdboom Date: 2010-05-20 16:19:53 +0000 (Thu, 20 May 2010) Log Message: ----------- Fix bug in symlog with 0-values in data. (Thanks Christer) Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/tests/test_axes.py trunk/matplotlib/lib/matplotlib/ticker.py Added Paths: ----------- trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/symlog.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/symlog.png trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/symlog.svg Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/symlog.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/symlog.pdf ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/symlog.png =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/symlog.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/symlog.svg =================================================================== --- trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/symlog.svg (rev 0) +++ trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/symlog.svg 2010-05-20 16:19:53 UTC (rev 8328) @@ -0,0 +1,521 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Created with matplotlib (http://matplotlib.sourceforge.net/) --> +<svg width="576pt" height="432pt" viewBox="0 0 576 432" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + version="1.1" + id="svg1"> +<filter id="colorAdd"><feComposite in="SourceGraphic" in2="BackgroundImage" operator="arithmetic" k2="1" k3="1"/></filter> +<g id="figure1"> +<g id="patch1"> +<path style="fill: #ffffff; stroke: #ffffff; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M0.000000 432.000000L576.000000 432.000000L576.000000 0.000000 +L0.000000 0.000000L0.000000 432.000000"/> +</g> +<g id="axes1"> +<g id="patch2"> +<path style="fill: #ffffff; opacity: 1.000000" d="M72.000000 388.800000L518.400000 388.800000L518.400000 43.200000 +L72.000000 43.200000L72.000000 388.800000"/> +</g> +<g id="line2d1"> +<defs> + <clipPath id="p50431ccdcb28178602d99d9270004dde"> +<rect x="72.000000" y="43.200000" width="446.400000" height="345.600000"/> + </clipPath> +</defs><path style="fill: none; stroke: #0000ff; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" clip-path="url(#p50431ccdcb28178602d99d9270004dde)" d="M72.000000 91.532183L89.856000 106.081620L107.712000 139.864366 +L143.424000 284.860915L179.136000 347.742535L232.704000 381.525282 +L286.272000 381.525282L500.544000 381.525282"/> +</g> +<g id="matplotlib.axis1"> +<g id="xtick1"> +<g id="line2d2"> +<defs><path id="m30e32995789d870ad79a2e54c91cf9c6" d="M0.000000 0.000000L0.000000 -4.000000"/></defs> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="72.000000" y="388.800000"/> +</g></g> +<g id="line2d3"> +<defs><path id="m9281cae24120827b11d5ea8a7ad3e96b" d="M0.000000 0.000000L0.000000 4.000000"/></defs> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="72.000000" y="43.200000"/> +</g></g> +<g id="text1"> +<defs> +<path id="c_7a2040fe3b94fcd41d0a72c84e93b115" d="M31.781250 -66.406250q-7.609375 0.000000 -11.453125 7.500000q-3.828125 7.484375 -3.828125 22.531250q0.000000 14.984375 3.828125 22.484375q3.843750 7.500000 11.453125 7.500000q7.671875 0.000000 11.500000 -7.500000q3.843750 -7.500000 3.843750 -22.484375q0.000000 -15.046875 -3.843750 -22.531250q-3.828125 -7.500000 -11.500000 -7.500000M31.781250 -74.218750q12.265625 0.000000 18.734375 9.703125q6.468750 9.687500 6.468750 28.140625q0.000000 18.406250 -6.468750 28.109375q-6.468750 9.687500 -18.734375 9.687500q-12.250000 0.000000 -18.718750 -9.687500q-6.468750 -9.703125 -6.468750 -28.109375q0.000000 -18.453125 6.468750 -28.140625q6.468750 -9.703125 18.718750 -9.703125"/> +</defs> +<g style="fill: #000000; opacity: 1.000000" transform="translate(68.976562,401.706250)scale(0.120000)"> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/> +</g> +</g> +</g> +<g id="xtick2"> +<g id="line2d4"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="161.280000" y="388.800000"/> +</g></g> +<g id="line2d5"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="161.280000" y="43.200000"/> +</g></g> +<g id="text2"> +<defs> +<path id="c_1260a2df50f305f3db244e29828f968e" d="M10.796875 -72.906250l38.718750 0.000000l0.000000 8.312500l-29.687500 0.000000l0.000000 17.859375q2.140625 -0.734375 4.281250 -1.093750q2.156250 -0.359375 4.312500 -0.359375q12.203125 0.000000 19.328125 6.687500q7.140625 6.687500 7.140625 18.109375q0.000000 11.765625 -7.328125 18.296875q-7.328125 6.515625 -20.656250 6.515625q-4.593750 0.000000 -9.359375 -0.781250q-4.750000 -0.781250 -9.828125 -2.343750l0.000000 -9.921875q4.390625 2.390625 9.078125 3.562500q4.687500 1.171875 9.906250 1.171875q8.453125 0.000000 13.375000 -4.437500q4.937500 -4.437500 4.937500 -12.062500q0.000000 -7.609375 -4.937500 -12.046875q-4.921875 -4.453125 -13.375000 -4.453125q-3.953125 0.000000 -7.890625 0.875000q-3.921875 0.875000 -8.015625 2.734375z"/> +</defs> +<g style="fill: #000000; opacity: 1.000000" transform="translate(158.444062,401.550000)scale(0.120000)"> +<use xlink:href="#c_1260a2df50f305f3db244e29828f968e"/> +</g> +</g> +</g> +<g id="xtick3"> +<g id="line2d6"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="250.560000" y="388.800000"/> +</g></g> +<g id="line2d7"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="250.560000" y="43.200000"/> +</g></g> +<g id="text3"> +<defs> +<path id="c_42baa63129a918535c52adb20d687ea7" d="M12.406250 -8.296875l16.109375 0.000000l0.000000 -55.625000l-17.531250 3.515625l0.000000 -8.984375l17.437500 -3.515625l9.859375 0.000000l0.000000 64.609375l16.109375 0.000000l0.000000 8.296875l-41.984375 0.000000z"/> +</defs> +<g style="fill: #000000; opacity: 1.000000" transform="translate(243.974062,401.706250)scale(0.120000)"> +<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> +</g> +</g> +</g> +<g id="xtick4"> +<g id="line2d8"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="339.840000" y="388.800000"/> +</g></g> +<g id="line2d9"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="339.840000" y="43.200000"/> +</g></g> +<g id="text4"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(333.379062,401.550000)scale(0.120000)"> +<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/> +<use xlink:href="#c_1260a2df50f305f3db244e29828f968e" x="63.623047"/> +</g> +</g> +</g> +<g id="xtick5"> +<g id="line2d10"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="429.120000" y="388.800000"/> +</g></g> +<g id="line2d11"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="429.120000" y="43.200000"/> +</g></g> +<g id="text5"> +<defs> +<path id="c_ed3f3ed3ebfbd18bcb9c012009a68ad1" d="M19.187500 -8.296875l34.421875 0.000000l0.000000 8.296875l-46.281250 0.000000l0.000000 -8.296875q5.609375 -5.812500 15.296875 -15.593750q9.703125 -9.796875 12.187500 -12.640625q4.734375 -5.312500 6.609375 -9.000000q1.890625 -3.687500 1.890625 -7.250000q0.000000 -5.812500 -4.078125 -9.468750q-4.078125 -3.671875 -10.625000 -3.671875q-4.640625 0.000000 -9.796875 1.609375q-5.140625 1.609375 -11.000000 4.890625l0.000000 -9.968750q5.953125 -2.390625 11.125000 -3.609375q5.187500 -1.218750 9.484375 -1.218750q11.328125 0.000000 18.062500 5.671875q6.734375 5.656250 6.734375 15.125000q0.000000 4.500000 -1.687500 8.531250q-1.671875 4.015625 -6.125000 9.484375q-1.218750 1.421875 -7.765625 8.187500q-6.531250 6.765625 -18.453125 18.921875"/> +</defs> +<g style="fill: #000000; opacity: 1.000000" transform="translate(422.315312,401.706250)scale(0.120000)"> +<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/> +</g> +</g> +</g> +<g id="xtick6"> +<g id="line2d12"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="518.400000" y="388.800000"/> +</g></g> +<g id="line2d13"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="518.400000" y="43.200000"/> +</g></g> +<g id="text6"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(511.720312,401.706250)scale(0.120000)"> +<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1"/> +<use xlink:href="#c_1260a2df50f305f3db244e29828f968e" x="63.623047"/> +</g> +</g> +</g> +</g> +<g id="matplotlib.axis2"> +<g id="ytick1"> +<g id="line2d14"> +<defs><path id="m3400efa6b1638b3fea9e19e898273957" d="M0.000000 0.000000L4.000000 0.000000"/></defs> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="381.525282"/> +</g></g> +<g id="line2d15"> +<defs><path id="m20b58b2501143cb5e0a5e8f1ef6f1643" d="M0.000000 0.000000L-4.000000 0.000000"/></defs> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="381.525282"/> +</g></g> +<g id="text7"> +<defs> +<path id="c_f47f2818876b2f1a61c47f270461e46e" d="M25.000000 2.203125q-12.250000 0.000000 -16.671875 -10.078125q-4.421875 -10.093750 -4.421875 -24.015625q0.000000 -8.687500 1.578125 -16.343750q1.593750 -7.671875 6.296875 -13.015625q4.718750 -5.359375 13.218750 -5.359375q6.593750 0.000000 10.781250 3.234375q4.203125 3.218750 6.406250 8.328125q2.203125 5.093750 3.000000 10.937500q0.812500 5.828125 0.812500 12.218750q0.000000 8.593750 -1.593750 16.093750q-1.578125 7.500000 -6.218750 12.750000q-4.640625 5.250000 -13.187500 5.250000M25.000000 -0.390625q5.562500 0.000000 8.296875 -5.703125q2.734375 -5.718750 3.375000 -12.656250q0.640625 -6.937500 0.640625 -14.750000q0.000000 -7.515625 -0.640625 -13.859375q-0.640625 -6.359375 -3.359375 -11.500000q-2.703125 -5.156250 -8.312500 -5.156250q-5.656250 0.000000 -8.390625 5.187500q-2.734375 5.171875 -3.375000 11.500000q-0.640625 6.312500 -0.640625 13.828125q0.000000 5.562500 0.265625 10.500000q0.281250 4.937500 1.453125 10.187500q1.171875 5.250000 3.781250 8.843750q2.609375 3.578125 6.906250 3.578125"/> +</defs> +<g id="mathtext1"> +<g style="fill: #000000" transform="translate(62.000000,386.025282)"> +<use xlink:href="#c_f47f2818876b2f1a61c47f270461e46e" transform="translate(0.000000,-1.000000)scale(0.120000)"/> +</g> +</g> +</g> +</g> +<g id="ytick2"> +<g id="line2d16"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="333.193098"/> +</g></g> +<g id="line2d17"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="333.193098"/> +</g></g> +<g id="text8"> +<g id="mathtext2"> +<g style="fill: #000000" transform="translate(44.000000,340.193098)"> +<use xlink:href="#c_42baa63129a918535c52adb20d687ea7" transform="translate(0.000000,-1.575000)scale(0.120000)"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" transform="translate(7.634766,-1.575000)scale(0.120000)"/> +<use xlink:href="#c_42baa63129a918535c52adb20d687ea7" transform="translate(15.269531,-7.875000)scale(0.084000)"/> +</g> +</g> +</g> +</g> +<g id="ytick3"> +<g id="line2d18"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="284.860915"/> +</g></g> +<g id="line2d19"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="284.860915"/> +</g></g> +<g id="text9"> +<g id="mathtext3"> +<g style="fill: #000000" transform="translate(44.000000,291.860915)"> +<use xlink:href="#c_42baa63129a918535c52adb20d687ea7" transform="translate(0.000000,-1.465625)scale(0.120000)"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" transform="translate(7.634766,-1.465625)scale(0.120000)"/> +<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" transform="translate(15.269531,-7.765625)scale(0.084000)"/> +</g> +</g> +</g> +</g> +<g id="ytick4"> +<g id="line2d20"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="236.528732"/> +</g></g> +<g id="line2d21"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="236.528732"/> +</g></g> +<g id="text10"> +<defs> +<path id="c_3dcfa38a02242cb63ec6726c6e70be7a" d="M40.578125 -39.312500q7.078125 1.515625 11.046875 6.312500q3.984375 4.781250 3.984375 11.812500q0.000000 10.781250 -7.421875 16.703125q-7.421875 5.906250 -21.093750 5.906250q-4.578125 0.000000 -9.437500 -0.906250q-4.859375 -0.906250 -10.031250 -2.718750l0.000000 -9.515625q4.093750 2.390625 8.968750 3.609375q4.890625 1.218750 10.218750 1.218750q9.265625 0.000000 14.125000 -3.656250q4.859375 -3.656250 4.859375 -10.640625q0.000000 -6.453125 -4.515625 -10.078125q-4.515625 -3.640625 -12.562500 -3.640625l-8.500000 0.000000l0.000000 -8.109375l8.890625 0.000000q7.265625 0.000000 11.125000 -2.906250q3.859375 -2.906250 3.859375 -8.375000q0.000000 -5.609375 -3.984375 -8.609375q-3.968750 -3.015625 -11.390625 -3.015625q-4.062500 0.000000 -8.703125 0.890625q-4.640625 0.875000 -10.203125 2.718750l0.000000 -8.781250q5.625000 -1.562500 10.531250 -2.343750q4.906250 -0.781250 9.250000 -0.781250q11.234375 0.000000 17.765625 5.109375q6.546875 5.093750 6.546875 13.781250q0.000000 6.062500 -3.468750 10.234375q-3.468750 4.171875 -9.859375 5.781250"/> +</defs> +<g id="mathtext4"> +<g style="fill: #000000" transform="translate(44.000000,243.528732)"> +<use xlink:href="#c_42baa63129a918535c52adb20d687ea7" transform="translate(0.000000,-1.465625)scale(0.120000)"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" transform="translate(7.634766,-1.465625)scale(0.120000)"/> +<use xlink:href="#c_3dcfa38a02242cb63ec6726c6e70be7a" transform="translate(15.269531,-7.765625)scale(0.084000)"/> +</g> +</g> +</g> +</g> +<g id="ytick5"> +<g id="line2d22"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="188.196549"/> +</g></g> +<g id="line2d23"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="188.196549"/> +</g></g> +<g id="text11"> +<defs> +<path id="c_a0416418d96557a09b8c1332d34883ba" d="M37.796875 -64.312500l-24.906250 38.921875l24.906250 0.000000zM35.203125 -72.906250l12.406250 0.000000l0.000000 47.515625l10.406250 0.000000l0.000000 8.203125l-10.406250 0.000000l0.000000 17.187500l-9.812500 0.000000l0.000000 -17.187500l-32.906250 0.000000l0.000000 -9.515625z"/> +</defs> +<g id="mathtext5"> +<g style="fill: #000000" transform="translate(44.000000,195.196549)"> +<use xlink:href="#c_42baa63129a918535c52adb20d687ea7" transform="translate(0.000000,-1.575000)scale(0.120000)"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" transform="translate(7.634766,-1.575000)scale(0.120000)"/> +<use xlink:href="#c_a0416418d96557a09b8c1332d34883ba" transform="translate(15.269531,-7.875000)scale(0.084000)"/> +</g> +</g> +</g> +</g> +<g id="ytick6"> +<g id="line2d24"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="139.864366"/> +</g></g> +<g id="line2d25"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="139.864366"/> +</g></g> +<g id="text12"> +<g id="mathtext6"> +<g style="fill: #000000" transform="translate(44.000000,146.864366)"> +<use xlink:href="#c_42baa63129a918535c52adb20d687ea7" transform="translate(0.000000,-1.575000)scale(0.120000)"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" transform="translate(7.634766,-1.575000)scale(0.120000)"/> +<use xlink:href="#c_1260a2df50f305f3db244e29828f968e" transform="translate(15.269531,-7.875000)scale(0.084000)"/> +</g> +</g> +</g> +</g> +<g id="ytick7"> +<g id="line2d26"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="91.532183"/> +</g></g> +<g id="line2d27"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="91.532183"/> +</g></g> +<g id="text13"> +<defs> +<path id="c_cc8d6d580d1b10c8632f7a42cd53db8a" d="M33.015625 -40.375000q-6.640625 0.000000 -10.531250 4.546875q-3.875000 4.531250 -3.875000 12.437500q0.000000 7.859375 3.875000 12.437500q3.890625 4.562500 10.531250 4.562500q6.640625 0.000000 10.515625 -4.562500q3.875000 -4.578125 3.875000 -12.437500q0.000000 -7.906250 -3.875000 -12.437500q-3.875000 -4.546875 -10.515625 -4.546875M52.593750 -71.296875l0.000000 8.984375q-3.718750 -1.750000 -7.500000 -2.671875q-3.781250 -0.937500 -7.500000 -0.937500q-9.765625 0.000000 -14.921875 6.593750q-5.140625 6.593750 -5.875000 19.921875q2.875000 -4.250000 7.218750 -6.515625q4.359375 -2.265625 9.578125 -2.265625q10.984375 0.000000 17.359375 6.671875q6.375000 6.656250 6.375000 18.125000q0.000000 11.234375 -6.640625 18.031250q-6.640625 6.781250 -17.671875 6.781250q-12.656250 0.000000 -19.343750 -9.687500q-6.687500 -9.703125 -6.687500 -28.109375q0.000000 -17.281250 8.203125 -27.562500q8.203125 -10.281250 22.015625 -10.281250q3.718750 0.000000 7.500000 0.734375q3.781250 0.734375 7.890625 2.187500"/> +</defs> +<g id="mathtext7"> +<g style="fill: #000000" transform="translate(44.000000,98.532183)"> +<use xlink:href="#c_42baa63129a918535c52adb20d687ea7" transform="translate(0.000000,-1.465625)scale(0.120000)"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" transform="translate(7.634766,-1.465625)scale(0.120000)"/> +<use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" transform="translate(15.269531,-7.765625)scale(0.084000)"/> +</g> +</g> +</g> +</g> +<g id="ytick8"> +<g id="line2d28"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="43.200000"/> +</g></g> +<g id="line2d29"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="43.200000"/> +</g></g> +<g id="text14"> +<defs> +<path id="c_956f18cfdaf972f35a6c2b4aaac2532b" d="M8.203125 -72.906250l46.875000 0.000000l0.000000 4.203125l-26.468750 68.703125l-10.296875 0.000000l24.906250 -64.593750l-35.015625 0.000000z"/> +</defs> +<g id="mathtext8"> +<g style="fill: #000000" transform="translate(44.000000,50.200000)"> +<use xlink:href="#c_42baa63129a918535c52adb20d687ea7" transform="translate(0.000000,-1.575000)scale(0.120000)"/> +<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" transform="translate(7.634766,-1.575000)scale(0.120000)"/> +<use xlink:href="#c_956f18cfdaf972f35a6c2b4aaac2532b" transform="translate(15.269531,-7.875000)scale(0.084000)"/> +</g> +</g> +</g> +</g> +<g id="ytick9"> +<g id="line2d30"> +<defs><path id="mb39cfcf7402899e54c4d755745537394" d="M0.000000 0.000000L2.000000 0.000000"/></defs> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="381.525282"/> +</g></g> +<g id="line2d31"> +<defs><path id="m6046ccd8b6d57b9fb587e3fdd930e9c5" d="M0.000000 0.000000L-2.000000 0.000000"/></defs> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="381.525282"/> +</g></g> +</g> +<g id="ytick10"> +<g id="line2d32"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="381.525282"/> +</g></g> +<g id="line2d33"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="381.525282"/> +</g></g> +</g> +<g id="ytick11"> +<g id="line2d34"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="381.525282"/> +</g></g> +<g id="line2d35"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="381.525282"/> +</g></g> +</g> +<g id="ytick12"> +<g id="line2d36"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="381.525282"/> +</g></g> +<g id="line2d37"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="381.525282"/> +</g></g> +</g> +<g id="ytick13"> +<g id="line2d38"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="318.643662"/> +</g></g> +<g id="line2d39"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="318.643662"/> +</g></g> +</g> +<g id="ytick14"> +<g id="line2d40"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="304.094225"/> +</g></g> +<g id="line2d41"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="304.094225"/> +</g></g> +</g> +<g id="ytick15"> +<g id="line2d42"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="295.583350"/> +</g></g> +<g id="line2d43"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="295.583350"/> +</g></g> +</g> +<g id="ytick16"> +<g id="line2d44"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="289.544788"/> +</g></g> +<g id="line2d45"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="289.544788"/> +</g></g> +</g> +<g id="ytick17"> +<g id="line2d46"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="270.311479"/> +</g></g> +<g id="line2d47"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="270.311479"/> +</g></g> +</g> +<g id="ytick18"> +<g id="line2d48"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="255.762042"/> +</g></g> +<g id="line2d49"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="255.762042"/> +</g></g> +</g> +<g id="ytick19"> +<g id="line2d50"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="247.251167"/> +</g></g> +<g id="line2d51"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="247.251167"/> +</g></g> +</g> +<g id="ytick20"> +<g id="line2d52"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="241.212605"/> +</g></g> +<g id="line2d53"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="241.212605"/> +</g></g> +</g> +<g id="ytick21"> +<g id="line2d54"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="221.979295"/> +</g></g> +<g id="line2d55"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="221.979295"/> +</g></g> +</g> +<g id="ytick22"> +<g id="line2d56"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="207.429859"/> +</g></g> +<g id="line2d57"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="207.429859"/> +</g></g> +</g> +<g id="ytick23"> +<g id="line2d58"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="198.918984"/> +</g></g> +<g id="line2d59"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="198.918984"/> +</g></g> +</g> +<g id="ytick24"> +<g id="line2d60"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="192.880422"/> +</g></g> +<g id="line2d61"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="192.880422"/> +</g></g> +</g> +<g id="ytick25"> +<g id="line2d62"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="173.647112"/> +</g></g> +<g id="line2d63"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="173.647112"/> +</g></g> +</g> +<g id="ytick26"> +<g id="line2d64"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="159.097676"/> +</g></g> +<g id="line2d65"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="159.097676"/> +</g></g> +</g> +<g id="ytick27"> +<g id="line2d66"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="150.586801"/> +</g></g> +<g id="line2d67"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="150.586801"/> +</g></g> +</g> +<g id="ytick28"> +<g id="line2d68"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="144.548239"/> +</g></g> +<g id="line2d69"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="144.548239"/> +</g></g> +</g> +<g id="ytick29"> +<g id="line2d70"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="125.314929"/> +</g></g> +<g id="line2d71"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="125.314929"/> +</g></g> +</g> +<g id="ytick30"> +<g id="line2d72"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="110.765492"/> +</g></g> +<g id="line2d73"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="110.765492"/> +</g></g> +</g> +<g id="ytick31"> +<g id="line2d74"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="102.254617"/> +</g></g> +<g id="line2d75"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="102.254617"/> +</g></g> +</g> +<g id="ytick32"> +<g id="line2d76"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="96.216056"/> +</g></g> +<g id="line2d77"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="96.216056"/> +</g></g> +</g> +<g id="ytick33"> +<g id="line2d78"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="76.982746"/> +</g></g> +<g id="line2d79"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="76.982746"/> +</g></g> +</g> +<g id="ytick34"> +<g id="line2d80"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="62.433309"/> +</g></g> +<g id="line2d81"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="62.433309"/> +</g></g> +</g> +<g id="ytick35"> +<g id="line2d82"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="53.922434"/> +</g></g> +<g id="line2d83"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="53.922434"/> +</g></g> +</g> +<g id="ytick36"> +<g id="line2d84"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#mb39cfcf7402899e54c4d755745537394" x="72.000000" y="47.883872"/> +</g></g> +<g id="line2d85"> +<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m6046ccd8b6d57b9fb587e3fdd930e9c5" x="518.400000" y="47.883872"/> +</g></g> +</g> +</g> +<g id="patch3"> +<path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M72.000000 43.200000L518.400000 43.200000"/> +</g> +<g id="patch4"> +<path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M518.400000 388.800000L518.400000 43.200000"/> +</g> +<g id="patch5"> +<path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M72.000000 388.800000L518.400000 388.800000"/> +</g> +<g id="patch6"> +<path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M72.000000 388.800000L72.000000 43.200000"/> +</g> +</g> +</g> +</svg> Modified: trunk/matplotlib/lib/matplotlib/tests/test_axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/tests/test_axes.py 2010-05-20 14:59:33 UTC (rev 8327) +++ trunk/matplotlib/lib/matplotlib/tests/test_axes.py 2010-05-20 16:19:53 UTC (rev 8328) @@ -445,7 +445,21 @@ ax1.fill_between(x, y1, y2, where=y2<=y1, facecolor='red', interpolate=True) fig.savefig('fill_between_interpolate') - + +@image_comparison(baseline_images=['symlog']) +def test_symlog(): + x = np.array([0,1,2,4,6,9,12,24]) + y = np.array([1000000, 500000, 100000, 100, 5, 0, 0, 0]) + + fig = plt.figure() + ax = fig.add_subplot(111) + ax.plot(x, y) + ax.set_yscale('symlog') + ax.set_xscale=('linear') + ax.set_ylim(-1,10000000) + + fig.savefig('symlog') + if __name__=='__main__': import nose nose.runmodule(argv=['-s','--with-doctest'], exit=False) Modified: trunk/matplotlib/lib/matplotlib/ticker.py =================================================================== --- trunk/matplotlib/lib/matplotlib/ticker.py 2010-05-20 14:59:33 UTC (rev 8327) +++ trunk/matplotlib/lib/matplotlib/ticker.py 2010-05-20 16:19:53 UTC (rev 8328) @@ -1178,16 +1178,21 @@ def decade_down(x, base=10): 'floor x to the nearest lower decade' - + if x == 0.0: + return -base lx = math.floor(math.log(x)/math.log(base)) return base**lx def decade_up(x, base=10): 'ceil x to the nearest higher decade' + if x == 0.0: + return base lx = math.ceil(math.log(x)/math.log(base)) return base**lx def is_decade(x,base=10): + if x == 0.0: + return True lx = math.log(x)/math.log(base) return lx==int(lx) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <md...@us...> - 2010-05-20 17:23:01
|
Revision: 8330 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8330&view=rev Author: mdboom Date: 2010-05-20 17:22:54 +0000 (Thu, 20 May 2010) Log Message: ----------- Update text to use verticalalignment='baseline' by default. Update small number of unit tests to adapt to the new behavior. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/axes.py trunk/matplotlib/lib/matplotlib/axis.py trunk/matplotlib/lib/matplotlib/pyplot.py trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_axes.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_axes.png trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_axes.svg trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext.png trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext.svg trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix.png trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix.svg trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans.png trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans.svg trunk/matplotlib/lib/matplotlib/tests/test_axes.py trunk/matplotlib/lib/matplotlib/text.py Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2010-05-20 16:33:38 UTC (rev 8329) +++ trunk/matplotlib/lib/matplotlib/axes.py 2010-05-20 17:22:54 UTC (rev 8330) @@ -865,7 +865,7 @@ self.title = mtext.Text( x=0.5, y=1.0, text='', fontproperties=props, - verticalalignment='bottom', + verticalalignment='baseline', horizontalalignment='center', ) self.title.set_transform(self.transAxes + self.titleOffsetTrans) @@ -2866,7 +2866,7 @@ """ default = { 'fontsize':rcParams['axes.titlesize'], - 'verticalalignment' : 'bottom', + 'verticalalignment' : 'baseline', 'horizontalalignment' : 'center' } @@ -2985,9 +2985,8 @@ %(Text)s """ default = { - 'verticalalignment' : 'bottom', + 'verticalalignment' : 'baseline', 'horizontalalignment' : 'left', - #'verticalalignment' : 'top', 'transform' : self.transData, } Modified: trunk/matplotlib/lib/matplotlib/axis.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axis.py 2010-05-20 16:33:38 UTC (rev 8329) +++ trunk/matplotlib/lib/matplotlib/axis.py 2010-05-20 17:22:54 UTC (rev 8330) @@ -1333,7 +1333,7 @@ """ assert position == 'top' or position == 'bottom' if position == 'top': - self.label.set_verticalalignment('bottom') + self.label.set_verticalalignment('baseline') else: self.label.set_verticalalignment('top') self.label_position=position @@ -1571,7 +1571,7 @@ offsetText = mtext.Text(x=0, y=0.5, fontproperties = font_manager.FontProperties(size=rcParams['ytick.labelsize']), color = rcParams['ytick.color'], - verticalalignment = 'bottom', + verticalalignment = 'baseline', horizontalalignment = 'left', ) offsetText.set_transform(mtransforms.blended_transform_factory( Modified: trunk/matplotlib/lib/matplotlib/pyplot.py =================================================================== --- trunk/matplotlib/lib/matplotlib/pyplot.py 2010-05-20 16:33:38 UTC (rev 8329) +++ trunk/matplotlib/lib/matplotlib/pyplot.py 2010-05-20 17:22:54 UTC (rev 8330) @@ -903,7 +903,7 @@ Default font override is:: override = {'fontsize': 'medium', - 'verticalalignment': 'bottom', + 'verticalalignment': 'baseline', 'horizontalalignment': 'center'} .. seealso:: Modified: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_axes.pdf =================================================================== (Binary files differ) Modified: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_axes.png =================================================================== (Binary files differ) Modified: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_axes.svg =================================================================== --- trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_axes.svg 2010-05-20 16:33:38 UTC (rev 8329) +++ trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_axes.svg 2010-05-20 17:22:54 UTC (rev 8330) @@ -38,55 +38,90 @@ C122.400000 261.827096 140.607298 305.783402 173.011948 338.188052 C205.416598 370.592702 249.372904 388.800000 295.200000 388.800000z"/> </clipPath> -</defs><path style="fill: none; stroke: #ee8d18; stroke-width: 3.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" clip-path="url(#p904278a4c1c81ab8b13ccb57b319fa38)" d="M295.200000 216.000000L296.233854 215.921901L297.250068 215.688492 -L299.455123 214.558065L301.365078 212.509125L302.401144 210.341395 -L302.849329 208.253938L302.868676 205.984288L302.423165 203.609265 -L301.489531 201.211506L300.058108 198.877447L298.133365 196.695191 -L294.648505 194.061331L290.996086 192.351552L286.458295 191.231788 -L281.860627 190.996572L277.016035 191.622104L273.316398 192.696331 -L269.640487 194.308614L266.064025 196.465694L262.664365 199.163935 -L259.519099 202.389058L256.704631 206.116069L254.294735 210.309371 -L252.359134 214.923065L250.842696 220.474366L250.069271 226.386069 -L250.030230 231.306699L250.536367 236.335565L251.608498 241.411618 -L253.260559 246.470787L255.499222 251.446750L258.323587 256.271756 -L261.724974 260.877491L265.686810 265.195961L270.184615 269.160399 -L275.186096 272.706170L280.651338 275.771675L286.533101 278.299231 -L292.777215 280.235926L299.323077 281.534427L306.104236 282.153740 -L313.049071 282.059907L320.081541 281.226625L327.122015 279.635789 -L334.088165 277.277944L340.895908 274.152634L347.460395 270.268658 -L353.697029 265.644204L359.522508 260.306882L364.855865 254.293636 -L369.619518 247.650545L373.740282 240.432502L377.150373 232.702784 -L379.788348 224.532512L381.420392 217.083534L382.388383 209.413665 -L382.666157 201.582801L382.233009 193.653721L381.073999 185.691588 -L379.180210 177.763410L376.548954 169.937483L373.183925 162.282807 -L369.095302 154.868490L365.027333 148.756694L360.454244 142.914477 -L355.393854 137.383517L349.867410 132.204315L342.863857 126.658485 -L336.416361 122.373025L329.591708 118.556639L322.424341 115.241960 -L314.951490 112.459065L307.212975 110.235243L299.251001 108.594769 -L291.109922 107.558705L282.835996 107.144714L274.477126 107.366888 -L266.082576 108.235606L257.702686 109.757405L249.388571 111.934882 -L241.191807 114.766611L233.164117 118.247090L225.357045 122.366716 -L217.821631 127.111776L210.608085 132.464475L203.765454 138.402979 -L197.341304 144.901496L191.381396 151.930376L185.929375 159.456235 -L181.026467 167.442113L176.711183 175.847644L173.019046 184.629263 -L169.982320 193.740427L167.629768 203.131862L165.986420 212.751825 -L165.073363 222.546393L164.907561 232.459763L165.501682 242.434572 -L166.863969 252.412225L168.998122 262.333243L171.903212 272.137615 -L175.573622 281.765158L179.999023 291.155887L185.164364 300.250385 -L190.019947 307.560621L195.361868 314.591347L201.174043 321.310181 -L207.438232 327.685667L214.134090 333.687420L221.239234 339.286264 -L228.729310 344.454372L236.578081 349.165394L244.757510 353.394589 -L253.237868 357.118946L261.987833 360.317295L270.974609 362.970423 -L280.164049 365.061173L289.520783 366.574537L299.008355 367.497740 -L308.589366 367.820325L318.225617 367.534212L327.878267 366.633763 -L337.507987 365.115828L347.075118 362.979786L356.539838 360.227569 -L365.862325 356.863688L375.002924 352.895231L383.922314 348.331868 -L392.581679 343.185828L400.942873 337.471883L408.968586 331.207303 -L416.622509 324.411813L423.869497 317.107536L430.675724 309.318919 -L437.008840 301.072660L442.838119 292.397615L448.134603 283.324698 -L452.871241 273.886777L457.023016 264.118548L460.567075 254.056416 -L463.482840 243.738354L465.752115 233.203764L467.359189 222.493325 -L467.813570 218.169240L467.813570 218.169240"/> +</defs><path style="fill: none; stroke: #ee8d18; stroke-width: 3.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" clip-path="url(#p904278a4c1c81ab8b13ccb57b319fa38)" d="M295.200000 216.000000L296.404923 215.893735L297.581858 215.576584 +L298.703177 215.053458L299.741970 214.332480L300.672394 213.424887 +L301.470011 212.344904L302.112108 211.109576L302.578004 209.738569 +L302.849329 208.253938L302.910281 206.679872L302.747854 205.042405 +L302.352036 203.369109L301.715973 201.688766L300.836099 200.031021 +L299.712229 198.426027L298.347615 196.904075L296.748960 195.495222 +L294.926402 194.228919L293.196149 193.278591L291.321689 192.471092 +L289.315148 191.822693L287.190280 191.348615L284.962371 191.062879 +L282.648140 190.978161L280.265615 191.105658L277.834006 191.454964 +L275.373564 192.033956L272.905428 192.848692L270.451463 193.903325 +L268.034095 195.200030L265.676132 196.738944L263.400583 198.518123 +L261.230477 200.533514L259.188667 202.778946L257.297649 205.246130 +L255.852840 207.464085L254.540313 209.821762L253.371951 212.311093 +L252.359134 214.923065L251.512663 217.647754L250.842696 220.474366 +L250.358676 223.391274L250.069271 226.386069L249.982310 229.445613 +L250.104727 232.556095L250.442510 235.703092L251.000646 238.871635 +L251.783082 242.046279L252.792683 245.211174L254.031196 248.350141 +L255.499222 251.446750L257.196193 254.484403L259.120350 257.446415 +L261.268735 260.316098L263.637181 263.076847L266.220312 265.712227 +L269.011551 268.206060L272.003126 270.542510L275.186096 272.706170 +L278.550369 274.682149L282.084731 276.456152L285.776890 278.014565 +L289.613507 279.344535L293.580255 280.434045L297.661862 281.271989 +L301.842179 281.848246L305.246126 282.114701L308.693365 282.203711 +L312.174577 282.111612L315.680185 281.835237L319.200382 281.371924 +L322.725153 280.719538L326.244311 279.876480L329.747519 278.841705 +L333.224324 277.614724L336.664183 276.195621L340.056502 274.585058 +L343.390657 272.784278L346.656037 270.795114L349.842066 268.619985 +L352.938245 266.261902L355.934177 263.724465L358.819604 261.011858 +L361.584439 258.128846L364.218799 255.080768L366.713035 251.873527 +L369.057766 248.513582L371.243911 245.007935L373.262719 241.364115 +L375.105797 237.590164L376.765143 233.694622L378.233174 229.686503 +L379.502753 225.575277L380.567214 221.370850L381.420392 217.083534 +L382.056642 212.724030L382.470867 208.303392L382.658536 203.833007 +L382.615707 199.324562L382.339043 194.790013L381.825832 190.241555 +L381.073999 185.691588L380.082124 181.152685L378.849451 176.637556 +L377.375899 172.159012L375.662069 167.729933L373.709253 163.363226 +L371.519437 159.071792L369.095302 154.868490L366.440227 150.766092 +L363.558286 146.777255L360.454244 142.914477L357.133553 139.190059 +L353.602343 135.616071L349.867410 132.204315L345.936210 128.966282 +L341.816840 125.913123L337.518023 123.055610L333.049094 120.404101 +L328.419974 117.968506L323.641155 115.758256L318.723670 113.782266 +L313.679075 112.048910L308.519413 110.565986L303.257196 109.340693 +L297.905365 108.379598L292.477265 107.688617L286.986606 107.272984 +L281.447435 107.137238L275.874094 107.285194L270.281186 107.719929 +L264.683537 108.443767L259.096155 109.458260L253.534191 110.764178 +L248.012898 112.361501L242.547590 114.249404L238.494572 115.855077 +L234.488132 117.622315L230.534712 119.549875L226.640728 121.636258 +L222.812556 123.879705L219.056525 126.278205L215.378904 128.829490 +L211.785893 131.531038L208.283613 134.380079L204.878095 137.373593 +L201.575273 140.508313L198.380968 143.780731L195.300884 147.187100 +L192.340595 150.723437L189.505536 154.385529L186.800994 158.168938 +L184.232100 162.069006L181.803815 166.080860L179.520929 170.199416 +L177.388043 174.419390L175.409569 178.735302L173.589716 183.141482 +L171.932486 187.632081L170.441661 192.201074L169.120802 196.842271 +L167.973238 201.549327L167.002061 206.315745L166.210116 211.134891 +L165.600000 216.000000L165.174053 220.904186L164.934352 225.840453 +L164.882710 230.801702L165.020666 235.780744L165.349484 240.770311 +L165.870149 245.763062L166.583363 250.751601L167.489541 255.728480 +L168.588810 260.686216L169.881006 265.617300L171.365673 270.514208 +L173.042059 275.369413L174.909120 280.175398L176.965515 284.924663 +L179.209607 289.609742L181.639467 294.223211L184.252869 298.757703 +L187.047298 303.205914L190.019947 307.560621L193.167719 311.814689 +L196.487235 315.961086L199.974832 319.992890L203.626570 323.903304 +L207.438232 327.685667L211.405334 331.333463L215.523128 334.840332 +L219.786604 338.200084L224.190501 341.406706L228.729310 344.454372 +L233.397284 347.337456L238.188441 350.050541L243.096575 352.588427 +L248.115262 354.946140L253.237868 357.118946L258.457561 359.102351 +L263.767317 360.892117L269.159929 362.484269L274.628020 363.875098 +L280.164049 365.061173L285.760324 366.039346L291.409015 366.806759 +L297.102157 367.360848L302.831670 367.699355L308.589366 367.820325 +L314.366961 367.722117L320.156088 367.403406L325.948307 366.863187 +L331.735122 366.100779L337.507987 365.115828L343.258323 363.908309 +L348.977530 362.478529L354.657000 360.827127L360.288127 358.955077 +L365.862325 356.863688L371.371037 354.554602L376.805749 352.029796 +L382.158005 349.291583L387.419416 346.342602L392.581679 343.185828 +L397.636585 339.824560L402.576032 336.262422L407.392041 332.503358 +L412.076766 328.551630L416.622509 324.411813L421.021730 320.088788 +L425.267061 315.587737L429.351315 310.914140L433.267502 306.073764 +L437.008840 301.072660L440.568763 295.917153L443.940934 290.613837 +L447.119257 285.169561L450.097888 279.591427L452.871241 273.886777 +L455.434002 268.063183L457.781137 262.128440L459.907902 256.090553 +L461.809850 249.957726L463.482840 243.738354L464.923046 237.441007 +L466.126964 231.074422L467.091419 224.647489L467.813570 218.169240 +L467.813570 218.169240"/> </g> <g id="line2d2"> <defs><path id="m87f81da4bcf58d853202912065521dc1" d="M0.000000 3.000000C0.795609 3.000000 1.558740 2.683901 2.121320 2.121320 @@ -228,22 +263,37 @@ <g id="matplotlib.axis2"> <g id="ytick1"> <g id="line2d11"> -<path style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; stroke-dasharray: 1.000000,3.000000; stroke-dashoffset: 0.000000; opacity: 1.000000" clip-path="url(#p904278a4c1c81ab8b13ccb57b319fa38)" d="M329.760000 216.000000L329.423664 211.190178L328.421204 206.473973 -L326.772131 201.943182L324.508542 197.685990L322.433652 194.722739 -L319.207393 191.139617L315.513858 188.040373L310.350107 184.937678 -L305.879627 183.131487L301.201281 181.965044L296.406127 181.461053 -L291.587496 181.629323L286.839179 182.466580L282.253596 183.956526 -L277.920000 186.070162L273.922739 188.766348L270.339617 191.992607 -L267.240373 195.686142L264.137678 200.849893L262.331487 205.320373 -L261.165044 209.998719L260.661053 214.793873L260.829323 219.612504 -L261.666580 224.360821L263.156526 228.946404L265.270162 233.280000 -L267.966348 237.277261L271.192607 240.860383L274.886142 243.959627 -L280.049893 247.062322L284.520373 248.868513L289.198719 250.034956 -L293.993873 250.538947L298.812504 250.370677L303.560821 249.533420 -L308.146404 248.043474L312.480000 245.929838L316.477261 243.233652 -L320.060383 240.007393L323.159627 236.313858L326.262322 231.150107 -L328.068513 226.679627L329.234956 222.001281L329.738947 217.206127 -L329.760000 216.000000L329.760000 216.000000"/> +<path style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; stroke-dasharray: 1.000000,3.000000; stroke-dashoffset: 0.000000; opacity: 1.000000" clip-path="url(#p904278a4c1c81ab8b13ccb57b319fa38)" d="M329.760000 216.000000L329.738947 214.793873L329.675814 213.589216 +L329.423664 211.190178L329.004781 208.814572L328.421204 206.473973 +L327.675777 204.179784L326.772131 201.943182L325.714669 199.775063 +L324.508542 197.685990L323.159627 195.686142L321.674496 193.785260 +L320.060383 191.992607L318.325154 190.316915L316.477261 188.766348 +L314.525707 187.348461L312.480000 186.070162L310.350107 184.937678 +L308.146404 183.956526L305.879627 183.131487L303.560821 182.466580 +L301.201281 181.965044L298.812504 181.629323L296.406127 181.461053 +L293.993873 181.461053L291.587496 181.629323L289.198719 181.965044 +L286.839179 182.466580L284.520373 183.131487L282.253596 183.956526 +L280.049893 184.937678L277.920000 186.070162L275.874293 187.348461 +L273.922739 188.766348L272.074846 190.316915L270.339617 191.992607 +L268.725504 193.785260L267.240373 195.686142L265.891458 197.685990 +L264.685331 199.775063L263.627869 201.943182L262.724223 204.179784 +L261.978796 206.473973L261.395219 208.814572L260.976336 211.190178 +L260.724186 213.589216L260.640000 216.000000L260.724186 218.410784 +L260.976336 220.809822L261.395219 223.185428L261.978796 225.526027 +L262.724223 227.820216L263.627869 230.056818L264.685331 232.224937 +L265.891458 234.314010L267.240373 236.313858L268.725504 238.214740 +L270.339617 240.007393L272.074846 241.683085L273.922739 243.233652 +L275.874293 244.651539L277.920000 245.929838L280.049893 247.062322 +L282.253596 248.043474L284.520373 248.868513L286.839179 249.533420 +L289.198719 250.034956L291.587496 250.370677L293.993873 250.538947 +L296.406127 250.538947L298.812504 250.370677L301.201281 250.034956 +L303.560821 249.533420L305.879627 248.868513L308.146404 248.043474 +L310.350107 247.062322L312.480000 245.929838L314.525707 244.651539 +L316.477261 243.233652L318.325154 241.683085L320.060383 240.007393 +L321.674496 238.214740L323.159627 236.313858L324.508542 234.314010 +L325.714669 232.224937L326.772131 230.056818L327.675777 227.820216 +L328.421204 225.526027L329.004781 223.185428L329.423664 220.809822 +L329.675814 218.410784L329.760000 216.000000L329.760000 216.000000"/> </g> <g id="text9"> <defs> @@ -258,27 +308,37 @@ </g> <g id="ytick2"> <g id="line2d12"> -<path style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; stroke-dasharray: 1.000000,3.000000; stroke-dashoffset: 0.000000; opacity: 1.000000" clip-path="url(#p904278a4c1c81ab8b13ccb57b319fa38)" d="M364.320000 216.000000L363.941353 208.774993L362.809562 201.629144 -L360.937026 194.640745L358.344262 187.886363L355.059676 181.440000 -L351.119255 175.372283L346.566170 169.749692L341.450308 164.633830 -L335.827717 160.080745L329.760000 156.140324L323.313637 152.855738 -L316.559255 150.262974L309.570856 148.390438L302.425007 147.258647 -L295.200000 146.880000L287.974993 147.258647L280.829144 148.390438 -L273.840745 150.262974L267.086363 152.855738L260.640000 156.140324 -L254.572283 160.080745L248.949692 164.633830L243.833830 169.749692 -L239.280745 175.372283L235.340324 181.440000L232.055738 187.886363 -L229.462974 194.640745L227.590438 201.629144L226.458647 208.774993 -L226.080000 216.000000L226.458647 223.225007L227.590438 230.370856 -L229.462974 237.359255L232.055738 244.113637L235.340324 250.560000 -L239.280745 256.627717L243.833830 262.250308L248.949692 267.366170 -L254.572283 271.919255L260.640000 275.859676L267.086363 279.144262 -L273.840745 281.737026L280.829144 283.609562L287.974993 284.741353 -L295.200000 285.120000L302.425007 284.741353L309.570856 283.609562 -L316.559255 281.737026L323.313637 279.144262L329.760000 275.859676 -L335.827717 271.919255L341.450308 267.366170L346.566170 262.250308 -L351.119255 256.627717L355.059676 250.560000L358.344262 244.113637 -L360.937026 237.359255L362.809562 230.370856L363.941353 223.225007 -L364.320000 216.000000L364.320000 216.000000"/> +<path style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; stroke-dasharray: 1.000000,3.000000; stroke-dashoffset: 0.000000; opacity: 1.000000" clip-path="url(#p904278a4c1c81ab8b13ccb57b319fa38)" d="M364.320000 216.000000L364.277894 213.587747L364.151627 211.178433 +L363.647329 206.380355L362.809562 201.629144L361.642408 196.947946 +L360.151554 192.359568L358.344262 187.886363L356.229338 183.550126 +L353.817084 179.371980L351.119255 175.372283L348.148992 171.570520 +L344.920767 167.985213L341.450308 164.633830L337.754521 161.532697 +L333.851413 158.696923L329.760000 156.140324L325.500214 153.875356 +L321.092808 151.913052L316.559255 150.262974L311.921641 148.933159 +L307.202562 147.930088L302.425007 147.258647L297.612253 146.922106 +L292.787747 146.922106L287.974993 147.258647L283.197438 147.930088 +L278.478359 148.933159L273.840745 150.262974L269.307192 151.913052 +L264.899786 153.875356L260.640000 156.140324L256.548587 158.696923 +L252.645479 161.532697L248.949692 164.633830L245.479233 167.985213 +L242.251008 171.570520L239.280745 175.372283L236.582916 179.371980 +L234.170662 183.550126L232.055738 187.886363L230.248446 192.359568 +L228.757592 196.947946L227.590438 201.629144L226.752671 206.380355 +L226.248373 211.178433L226.080000 216.000000L226.248373 220.821567 +L226.752671 225.619645L227.590438 230.370856L228.757592 235.052054 +L230.248446 239.640432L232.055738 244.113637L234.170662 248.449874 +L236.582916 252.628020L239.280745 256.627717L242.251008 260.429480 +L245.479233 264.014787L248.949692 267.366170L252.645479 270.467303 +L256.548587 273.303077L260.640000 275.859676L264.899786 278.124644 +L269.307192 280.086948L273.840745 281.737026L278.478359 283.066841 +L283.197438 284.069912L287.974993 284.741353L292.787747 285.077894 +L297.612253 285.077894L302.425007 284.741353L307.202562 284.069912 +L311.921641 283.066841L316.559255 281.737026L321.092808 280.086948 +L325.500214 278.124644L329.760000 275.859676L333.851413 273.303077 +L337.754521 270.467303L341.450308 267.366170L344.920767 264.014787 +L348.148992 260.429480L351.119255 256.627717L353.817084 252.628020 +L356.229338 248.449874L358.344262 244.113637L360.151554 239.640432 +L361.642408 235.052054L362.809562 230.370856L363.647329 225.619645 +L364.151627 220.821567L364.320000 216.000000L364.320000 216.000000"/> </g> <g id="text10"> <g style="fill: #000000; opacity: 1.000000" transform="translate(358.228372,190.609724)scale(0.120000)"> @@ -291,36 +351,66 @@ <g id="ytick3"> <g id="line2d13"> <path style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; stroke-dasharray: 1.000000,3.000000; stroke-dashoffset: 0.000000; opacity: 1.000000" clip-path="url(#p904278a4c1c81ab8b13ccb57b319fa38)" d="M398.880000 216.000000L398.816841 212.381620L398.627441 208.767649 -L397.870993 201.570533L396.614343 194.443716L394.863613 187.421919 -L392.627331 180.539352L389.916393 173.829545L386.744006 167.325188 -L383.125627 161.057971L379.078882 155.058425L374.623488 149.355781 -L369.781150 143.977820L364.575461 138.950744L359.031782 134.299045 -L353.177120 130.045384L347.040000 126.210486L340.650320 122.813033 -L334.039212 119.869578L327.238882 117.394460L320.282462 115.399739 -L313.203843 113.895132L306.037511 112.887970L298.818380 112.383159 -L291.581620 112.383159L284.362489 112.887970L277.196157 113.895132 -L270.117538 115.399739L263.161118 117.394460L256.360788 119.869578 -L249.749680 122.813033L243.360000 126.210486L237.222880 130.045384 -L231.368218 134.299045L225.824539 138.950744L220.618850 143.977820 -L215.776512 149.355781L211.321118 155.058425L207.274373 161.057971 -L203.655994 167.325188L200.483607 173.829545L197.772669 180.539352 -L195.536387 187.421919L193.785657 194.443716L192.529007 201.570533 -L191.772559 208.767649L191.520000 216.000000L191.772559 223.232351 -L192.529007 230.429467L193.785657 237.556284L195.536387 244.578081 -L197.772669 251.460648L200.483607 258.170455L203.655994 264.674812 -L207.274373 270.942029L211.321118 276.941575L215.776512 282.644219 -L220.618850 288.022180L225.824539 293.049256L231.368218 297.700955 -L237.222880 301.954616L243.360000 305.789514L249.749680 309.186967 -L256.360788 312.130422L263.161118 314.605540L270.117538 316.600261 -L277.196157 318.104868L284.362489 319.112030L291.581620 319.616841 -L298.818380 319.616841L306.037511 319.112030L313.203843 318.104868 -L320.282462 316.600261L327.238882 314.605540L334.039212 312.130422 -L340.650320 309.186967L347.040000 305.789514L353.177120 301.954616 -L359.031782 297.700955L364.575461 293.049256L369.781150 288.022180 -L374.623488 282.644219L379.078882 276.941575L383.125627 270.942029 -L386.744006 264.674812L389.916393 258.170455L392.627331 251.460648 -L394.863613 244.578081L396.614343 237.556284L397.870993 230.429467 -L398.627441 223.232351L398.880000 216.000000L398.880000 216.000000"/> +L398.312030 205.162489L397.870993 201.570533L397.304868 197.996157 +L396.614343 194.443716L395.800261 190.917538L394.863613 187.421919 +L393.805540 183.961118L392.627331 180.539352L391.330422 177.160788 +L389.916393 173.829545L388.386967 170.549680L386.744006 167.325188 +L384.989514 164.160000L383.125627 161.057971L381.154616 158.022880 +L379.078882 155.058425L376.900955 152.168218L374.623488 149.355781 +L372.249256 146.624539L369.781150 143.977820L367.222180 141.418850 +L364.575461 138.950744L361.844219 136.576512L359.031782 134.299045 +L356.141575 132.121118L353.177120 130.045384L350.142029 128.074373 +L347.040000 126.210486L343.874812 124.455994L340.650320 122.813033 +L337.370455 121.283607L334.039212 119.869578L330.660648 118.572669 +L327.238882 117.394460L323.778081 116.336387L320.282462 115.399739 +L316.756284 114.585657L313.203843 113.895132L309.629467 113.329007 +L306.037511 112.887970L302.432351 112.572559L298.818380 112.383159 +L295.200000 112.320000L291.581620 112.383159L287.967649 112.572559 +L284.362489 112.887970L280.770533 113.329007L277.196157 113.895132 +L273.643716 114.585657L270.117538 115.399739L266.621919 116.336387 +L263.161118 117.394460L259.739352 118.572669L256.360788 119.869578 +L253.029545 121.283607L249.749680 122.813033L246.525188 124.455994 +L243.360000 126.210486L240.257971 128.074373L237.222880 130.045384 +L234.258425 132.121118L231.368218 134.299045L228.555781 136.576512 +L225.824539 138.950744L223.177820 141.418850L220.618850 143.977820 +L218.150744 146.624539L215.776512 149.355781L213.499045 152.168218 +L211.321118 155.058425L209.245384 158.022880L207.274373 161.057971 +L205.410486 164.160000L203.655994 167.325188L202.013033 170.549680 +L200.483607 173.829545L199.069578 177.160788L197.772669 180.539352 +L196.594460 183.961118L195.536387 187.421919L194.599739 190.917538 +L193.785657 194.443716L193.095132 197.996157L192.529007 201.570533 +L192.087970 205.162489L191.772559 208.767649L191.583159 212.381620 +L191.520000 216.000000L191.583159 219.618380L191.772559 223.232351 +L192.087970 226.837511L192.529007 230.429467L193.095132 234.003843 +L193.785657 237.556284L194.599739 241.082462L195.536387 244.578081 +L196.594460 248.038882L197.772669 251.460648L199.069578 254.839212 +L200.483607 258.170455L202.013033 261.450320L203.655994 264.674812 +L205.410486 267.840000L207.274373 270.942029L209.245384 273.977120 +L211.321118 276.941575L213.499045 279.831782L215.776512 282.644219 +L218.150744 285.375461L220.618850 288.022180L223.177820 290.581150 +L225.824539 293.049256L228.555781 295.423488L231.368218 297.700955 +L234.258425 299.878882L237.222880 301.954616L240.257971 303.925627 +L243.360000 305.789514L246.525188 307.544006L249.749680 309.186967 +L253.029545 310.716393L256.360788 312.130422L259.739352 313.427331 +L263.161118 314.605540L266.621919 315.663613L270.117538 316.600261 +L273.643716 317.414343L277.196157 318.104868L280.770533 318.670993 +L284.362489 319.112030L287.967649 319.427441L291.581620 319.616841 +L295.200000 319.680000L298.818380 319.616841L302.432351 319.427441 +L306.037511 319.112030L309.629467 318.670993L313.203843 318.104868 +L316.756284 317.414343L320.282462 316.600261L323.778081 315.663613 +L327.238882 314.605540L330.660648 313.427331L334.039212 312.130422 +L337.370455 310.716393L340.650320 309.186967L343.874812 307.544006 +L347.040000 305.789514L350.142029 303.925627L353.177120 301.954616 +L356.141575 299.878882L359.031782 297.700955L361.844219 295.423488 +L364.575461 293.049256L367.222180 290.581150L369.781150 288.022180 +L372.249256 285.375461L374.623488 282.644219L376.900955 279.831782 +L379.078882 276.941575L381.154616 273.977120L383.125627 270.942029 +L384.989514 267.840000L386.744006 264.674812L388.386967 261.450320 +L389.916393 258.170455L391.330422 254.839212L392.627331 251.460648 +L393.805540 248.038882L394.863613 244.578081L395.800261 241.082462 +L396.614343 237.556284L397.304868 234.003843L397.870993 230.429467 +L398.312030 226.837511L398.627441 223.232351L398.816841 219.618380 +L398.880000 216.000000L398.880000 216.000000"/> </g> <g id="text11"> <defs> @@ -336,36 +426,66 @@ <g id="ytick4"> <g id="line2d14"> <path style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; stroke-dasharray: 1.000000,3.000000; stroke-dashoffset: 0.000000; opacity: 1.000000" clip-path="url(#p904278a4c1c81ab8b13ccb57b319fa38)" d="M433.440000 216.000000L433.355788 211.175494L433.103254 206.356865 -L432.094658 196.760711L430.419124 187.258288L428.084817 177.895892 -L425.103108 168.719135L421.488524 159.772726L417.258675 151.100251 -L412.434169 142.743961L407.038509 134.744567L401.097984 127.141041 -L394.641534 119.970427L387.700615 113.267659L380.309042 107.065393 -L372.502827 101.393846L364.320000 96.280648L355.800427 91.750711 -L346.985615 87.826104L337.918509 84.525947L328.643283 81.866319 -L319.205124 79.860176L309.650015 78.517293L300.024506 77.844212 -L290.375494 77.844212L280.749985 78.517293L271.194876 79.860176 -L261.756717 81.866319L252.481491 84.525947L243.414385 87.826104 -L234.599573 91.750711L226.080000 96.280648L217.897173 101.393846 -L210.090958 107.065393L202.699385 113.267659L195.758466 119.970427 -L189.302016 127.141041L183.361491 134.744567L177.965831 142.743961 -L173.141325 151.100251L168.911476 159.772726L165.296892 168.719135 -L162.315183 177.895892L159.980876 187.258288L158.305342 196.760711 -L157.296746 206.356865L156.960000 216.000000L157.296746 225.643135 -L158.305342 235.239289L159.980876 244.741712L162.315183 254.104108 -L165.296892 263.280865L168.911476 272.227274L173.141325 280.899749 -L177.965831 289.256039L183.361491 297.255433L189.302016 304.858959 -L195.758466 312.029573L202.699385 318.732341L210.090958 324.934607 -L217.897173 330.606154L226.080000 335.719352L234.599573 340.249289 -L243.414385 344.173896L252.481491 347.474053L261.756717 350.133681 -L271.194876 352.139824L280.749985 353.482707L290.375494 354.155788 -L300.024506 354.155788L309.650015 353.482707L319.205124 352.139824 -L328.643283 350.133681L337.918509 347.474053L346.985615 344.173896 -L355.800427 340.249289L364.320000 335.719352L372.502827 330.606154 -L380.309042 324.934607L387.700615 318.732341L394.641534 312.029573 -L401.097984 304.858959L407.038509 297.255433L412.434169 289.256039 -L417.258675 280.899749L421.488524 272.227274L425.103108 263.280865 -L428.084817 254.104108L430.419124 244.741712L432.094658 235.239289 -L433.103254 225.643135L433.440000 216.000000L433.440000 216.000000"/> +L432.682707 201.549985L432.094658 196.760711L431.339824 191.994876 +L430.419124 187.258288L429.333681 182.556717L428.084817 177.895892 +L426.674053 173.281491L425.103108 168.719135L423.373896 164.214385 +L421.488524 159.772726L419.449289 155.399573L417.258675 151.100251 +L414.919352 146.880000L412.434169 142.743961L409.806154 138.697173 +L407.038509 134.744567L404.134607 130.890958L401.097984 127.141041 +L397.932341 123.499385L394.641534 119.970427L391.229573 116.558466 +L387.700615 113.267659L384.058959 110.102016L380.309042 107.065393 +L376.455433 104.161491L372.502827 101.393846L368.456039 98.765831 +L364.320000 96.280648L360.099749 93.941325L355.800427 91.750711 +L351.427274 89.711476L346.985615 87.826104L342.480865 86.096892 +L337.918509 84.525947L333.304108 83.115183L328.643283 81.866319 +L323.941712 80.780876L319.205124 79.860176L314.439289 79.105342 +L309.650015 78.517293L304.843135 78.096746L300.024506 77.844212 +L295.200000 77.760000L290.375494 77.844212L285.556865 78.096746 +L280.749985 78.517293L275.960711 79.105342L271.194876 79.860176 +L266.458288 80.780876L261.756717 81.866319L257.095892 83.115183 +L252.481491 84.525947L247.919135 86.096892L243.414385 87.826104 +L238.972726 89.711476L234.599573 91.750711L230.300251 93.941325 +L226.080000 96.280648L221.943961 98.765831L217.897173 101.393846 +L213.944567 104.161491L210.090958 107.065393L206.341041 110.102016 +L202.699385 113.267659L199.170427 116.558466L195.758466 119.970427 +L192.467659 123.499385L189.302016 127.141041L186.265393 130.890958 +L183.361491 134.744567L180.593846 138.697173L177.965831 142.743961 +L175.480648 146.880000L173.141325 151.100251L170.950711 155.399573 +L168.911476 159.772726L167.026104 164.214385L165.296892 168.719135 +L163.725947 173.281491L162.315183 177.895892L161.066319 182.556717 +L159.980876 187.258288L159.060176 191.994876L158.305342 196.760711 +L157.717293 201.549985L157.296746 206.356865L157.044212 211.175494 +L156.960000 216.000000L157.044212 220.824506L157.296746 225.643135 +L157.717293 230.450015L158.305342 235.239289L159.060176 240.005124 +L159.980876 244.741712L161.066319 249.443283L162.315183 254.104108 +L163.725947 258.718509L165.296892 263.280865L167.026104 267.785615 +L168.911476 272.227274L170.950711 276.600427L173.141325 280.899749 +L175.480648 285.120000L177.965831 289.256039L180.593846 293.302827 +L183.361491 297.255433L186.265393 301.109042L189.302016 304.858959 +L192.467659 308.500615L195.758466 312.029573L199.170427 315.441534 +L202.699385 318.732341L206.341041 321.897984L210.090958 324.934607 +L213.944567 327.838509L217.897173 330.606154L221.943961 333.234169 +L226.080000 335.719352L230.300251 338.058675L234.599573 340.249289 +L238.972726 342.288524L243.414385 344.173896L247.919135 345.903108 +L252.481491 347.474053L257.095892 348.884817L261.756717 350.133681 +L266.458288 351.219124L271.194876 352.139824L275.960711 352.894658 +L280.749985 353.482707L285.556865 353.903254L290.375494 354.155788 +L295.200000 354.240000L300.024506 354.155788L304.843135 353.903254 +L309.650015 353.482707L314.439289 352.894658L319.205124 352.139824 +L323.941712 351.219124L328.643283 350.133681L333.304108 348.884817 +L337.918509 347.474053L342.480865 345.903108L346.985615 344.173896 +L351.427274 342.288524L355.800427 340.249289L360.099749 338.058675 +L364.320000 335.719352L368.456039 333.234169L372.502827 330.606154 +L376.455433 327.838509L380.309042 324.934607L384.058959 321.897984 +L387.700615 318.732341L391.229573 315.441534L394.641534 312.029573 +L397.932341 308.500615L401.097984 304.858959L404.134607 301.109042 +L407.038509 297.255433L409.806154 293.302827L412.434169 289.256039 +L414.919352 285.120000L417.258675 280.899749L419.449289 276.600427 +L421.488524 272.227274L423.373896 267.785615L425.103108 263.280865 +L426.674053 258.718509L428.084817 254.104108L429.333681 249.443283 +L430.419124 244.741712L431.339824 240.005124L432.094658 235.239289 +L432.682707 230.450015L433.103254 225.643135L433.355788 220.824506 +L433.440000 216.000000L433.440000 216.000000"/> </g> <g id="text12"> <g style="fill: #000000; opacity: 1.000000" transform="translate(422.165051,164.158645)scale(0.120000)"> @@ -378,36 +498,66 @@ <g id="ytick5"> <g id="line2d15"> <path style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; stroke-dasharray: 1.000000,3.000000; stroke-dashoffset: 0.000000; opacity: 1.000000" clip-path="url(#p904278a4c1c81ab8b13ccb57b319fa38)" d="M468.000000 216.000000L467.894735 209.969367L467.579068 203.946081 -L466.318322 191.950888L464.223905 180.072860L461.306021 168.369865 -L457.578885 156.898919L453.060655 145.715908L447.773344 134.875314 -L441.742711 124.429951L434.998137 114.430708L427.572480 104.926301 -L419.501917 95.963034L410.825769 87.584574L401.586303 79.831742 -L391.828534 72.742307L381.600000 66.350810L370.950534 60.688389 -L359.932019 55.782630L348.598137 51.657434L337.004104 48.332898 -L325.206405 45.825220L313.262518 44.146616L301.230633 43.305265 -L289.169367 43.305265L277.137482 44.146616L265.193595 45.825220 -L253.395896 48.332898L241.801863 51.657434L230.467981 55.782630 -L219.449466 60.688389L208.800000 66.350810L198.571466 72.742307 -L188.813697 79.831742L179.574231 87.584574L170.898083 95.963034 -L162.827520 104.926301L155.401863 114.430708L148.657289 124.429951 -L142.626656 134.875314L137.339345 145.715908L132.821115 156.898919 -L129.093979 168.369865L126.176095 180.072860L124.081678 191.950888 -L122.820932 203.946081L122.400000 216.000000L122.820932 228.053919 -L124.081678 240.049112L126.176095 251.927140L129.093979 263.630135 -L132.821115 275.101081L137.339345 286.284092L142.626656 297.124686 -L148.657289 307.570049L155.401863 317.569292L162.827520 327.073699 -L170.898083 336.036966L179.574231 344.415426L188.813697 352.168258 -L198.571466 359.257693L208.800000 365.649190L219.449466 371.311611 -L230.467981 376.217370L241.801863 380.342566L253.395896 383.667102 -L265.193595 386.174780L277.137482 387.853384L289.169367 388.694735 -L301.230633 388.694735L313.262518 387.853384L325.206405 386.174780 -L337.004104 383.667102L348.598137 380.342566L359.932019 376.217370 -L370.950534 371.311611L381.600000 365.649190L391.828534 359.257693 -L401.586303 352.168258L410.825769 344.415426L419.501917 336.036966 -L427.572480 327.073699L434.998137 317.569292L441.742711 307.570049 -L447.773344 297.124686L453.060655 286.284092L457.578885 275.101081 -L461.306021 263.630135L464.223905 251.927140L466.318322 240.049112 -L467.579068 228.053919L468.000000 216.000000L468.000000 216.000000"/> +L467.053384 197.937482L466.318322 191.950888L465.374780 185.993595 +L464.223905 180.072860L462.867102 174.195896L461.306021 168.369865 +L459.542566 162.601863L457.578885 156.898919L455.417370 151.267981 +L453.060655 145.715908L450.511611 140.249466L447.773344 134.875314 +L444.849190 129.600000L441.742711 124.429951L438.457693 119.371466 +L434.998137 114.430708L431.368258 109.613697L427.572480 104.926301 +L423.615426 100.374231L419.501917 95.963034L415.236966 91.698083 +L410.825769 87.584574L406.273699 83.627520L401.586303 79.831742 +L396.769292 76.201863L391.828534 72.742307L386.770049 69.457289 +L381.600000 66.350810L376.324686 63.426656L370.950534 60.688389 +L365.484092 58.139345L359.932019 55.782630L354.301081 53.621115 +L348.598137 51.657434L342.830135 49.893979L337.004104 48.332898 +L331.127140 46.976095L325.206405 45.825220L319.249112 44.881678 +L313.262518 44.146616L307.253919 43.620932L301.230633 43.305265 +L295.200000 43.200000L289.169367 43.305265L283.146081 43.620932 +L277.137482 44.146616L271.150888 44.881678L265.193595 45.825220 +L259.272860 46.976095L253.395896 48.332898L247.569865 49.893979 +L241.801863 51.657434L236.098919 53.621115L230.467981 55.782630 +L224.915908 58.139345L219.449466 60.688389L214.075314 63.426656 +L208.800000 66.350810L203.629951 69.457289L198.571466 72.742307 +L193.630708 76.201863L188.813697 79.831742L184.126301 83.627520 +L179.574231 87.584574L175.163034 91.698083L170.898083 95.963034 +L166.784574 100.374231L162.827520 104.926301L159.031742 109.613697 +L155.401863 114.430708L151.942307 119.371466L148.657289 124.429951 +L145.550810 129.600000L142.626656 134.875314L139.888389 140.249466 +L137.339345 145.715908L134.982630 151.267981L132.821115 156.898919 +L130.857434 162.601863L129.093979 168.369865L127.532898 174.195896 +L126.176095 180.072860L125.025220 185.993595L124.081678 191.950888 +L123.346616 197.937482L122.820932 203.946081L122.505265 209.969367 +L122.400000 216.000000L122.505265 222.030633L122.820932 228.053919 +L123.346616 234.062518L124.081678 240.049112L125.025220 246.006405 +L126.176095 251.927140L127.532898 257.804104L129.093979 263.630135 +L130.857434 269.398137L132.821115 275.101081L134.982630 280.732019 +L137.339345 286.284092L139.888389 291.750534L142.626656 297.124686 +L145.550810 302.400000L148.657289 307.570049L151.942307 312.628534 +L155.401863 317.569292L159.031742 322.386303L162.827520 327.073699 +L166.784574 331.625769L170.898083 336.036966L175.163034 340.301917 +L179.574231 344.415426L184.126301 348.372480L188.813697 352.168258 +L193.630708 355.798137L198.571466 359.257693L203.629951 362.542711 +L208.800000 365.649190L214.075314 368.573344L219.449466 371.311611 +L224.915908 373.860655L230.467981 376.217370L236.098919 378.378885 +L241.801863 380.342566L247.569865 382.106021L253.395896 383.667102 +L259.272860 385.023905L265.193595 386.174780L271.150888 387.118322 +L277.137482 387.853384L283.146081 388.379068L289.169367 388.694735 +L295.200000 388.800000L301.230633 388.694735L307.253919 388.379068 +L313.262518 387.853384L319.249112 387.118322L325.206405 386.174780 +L331.127140 385.023905L337.004104 383.667102L342.830135 382.106021 +L348.598137 380.342566L354.301081 378.378885L359.932019 376.217370 +L365.484092 373.860655L370.950534 371.311611L376.324686 368.573344 +L381.600000 365.649190L386.770049 362.542711L391.828534 359.257693 +L396.769292 355.798137L401.586303 352.168258L406.273699 348.372480 +L410.825769 344.415426L415.236966 340.301917L419.501917 336.036966 +L423.615426 331.625769L427.572480 327.073699L431.368258 322.386303 +L434.998137 317.569292L438.457693 312.628534L441.742711 307.570049 +L444.849190 302.400000L447.773344 297.124686L450.511611 291.750534 +L453.060655 286.284092L455.417370 280.732019L457.578885 275.101081 +L459.542566 269.398137L461.306021 263.630135L462.867102 257.804104 +L464.223905 251.927140L465.374780 246.006405L466.318322 240.049112 +L467.053384 234.062518L467.579068 228.053919L467.894735 222.030633 +L468.000000 216.000000L468.000000 216.000000"/> </g> <g id="text13"> <g style="fill: #000000; opacity: 1.000000" transform="translate(454.336515,150.933106)scale(0.120000)"> @@ -430,9 +580,9 @@ C205.416598 370.592702 249.372904 388.800000 295.200000 388.800000z"/> </g> <g id="patch4"> -<path style="fill: #000000; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M138.076545 392.877319L141.723354 394.520725L178.780037 312.289876 -L182.426846 313.933281L181.074041 302.331412L171.486418 309.003064 -L175.133227 310.646470L138.076545 392.877319"/> +<path style="fill: #000000; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M138.069192 395.268834L141.730707 396.879210L178.787389 312.623361 +L182.448904 314.233736L181.074041 302.456412L171.464360 309.402609 +L175.125875 311.012985L138.069192 395.268834"/> </g> <g id="text14"> <defs> @@ -446,7 +596,7 @@ <path id="c_0f8c41144cfbf448378cb6fd1cc8e549" d="M18.312500 -70.218750l0.000000 15.531250l18.500000 0.000000l0.000000 6.984375l-18.500000 0.000000l0.000000 29.687500q0.000000 6.687500 1.828125 8.593750q1.828125 1.906250 7.453125 1.906250l9.218750 0.000000l0.000000 7.515625l-9.218750 0.000000q-10.406250 0.000000 -14.359375 -3.875000q-3.953125 -3.890625 -3.953125 -14.140625l0.000000 -29.687500l-6.593750 0.000000l0.000000 -6.984375l6.593750 0.000000l0.000000 -15.531250z"/> <path id="c_6a63bda47b2f3da1cec6aadd80692cfe" d="M9.421875 -54.687500l8.984375 0.000000l0.000000 54.687500l-8.984375 0.000000zM9.421875 -75.984375l8.984375 0.000000l0.000000 11.390625l-8.984375 0.000000z"/> </defs> -<g style="fill: #000000; opacity: 1.000000" transform="translate(28.800000,407.900000)scale(0.120000)"> +<g style="fill: #000000; opacity: 1.000000" transform="translate(28.800000,410.400000)scale(0.120000)"> <use xlink:href="#c_01d93a582460e35a7945ca50d148ffeb"/> <use xlink:href="#c_d41d8cd98f00b204e9800998ecf8427e" x="61.279297"/> <use xlink:href="#c_f15a64fcd463ef4629c48bab42cde24c" x="93.066406"/> Modified: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext.pdf =================================================================== --- trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext.pdf 2010-05-20 16:33:38 UTC (rev 8329) +++ trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext.pdf 2010-05-20 17:22:54 UTC (rev 8330) @@ -16,53 +16,51 @@ << /Filter /FlateDecode /Length 11 0 R >> stream x\x9C\xED\y\xAFG\xB1\xFF\xFF~\x8A\xC3&\xAE\x9DI\xEFKދ\x84$\xC0?0\xE0 rb;ر/AJ@\xE2\xBB$\xECH,\x81\x80X\x9C\xC0>ث\x9A\xAE\xEE\xA9\xEE\xE9\x9Esν~z\x80\x82l\xCF\xE9\xA9\xE5WK\xB7\xDC\xDD9S\xBB/\xEC\xE4\xEEU\xF8\xEF\xC53\xB1\xBB{;\xED\xF0ϻ\xF3\x9FJe\x81_\xCE> -#\xBF |
From: <ef...@us...> - 2010-05-21 18:26:19
|
Revision: 8331 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8331&view=rev Author: efiring Date: 2010-05-21 18:26:12 +0000 (Fri, 21 May 2010) Log Message: ----------- Fix bug introduced in 8308: allow vmin == vmax Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/colors.py trunk/matplotlib/lib/matplotlib/dates.py Modified: trunk/matplotlib/lib/matplotlib/colors.py =================================================================== --- trunk/matplotlib/lib/matplotlib/colors.py 2010-05-20 17:22:54 UTC (rev 8330) +++ trunk/matplotlib/lib/matplotlib/colors.py 2010-05-21 18:26:12 UTC (rev 8331) @@ -810,11 +810,8 @@ def inverse(self, value): if not self.scaled(): raise ValueError("Not invertible until scaled") - vmin, vmax = self.vmin, self.vmax - if vmin >= vmax: - raise ValueError("Inversion requires valid vmax > vmin") - vmin = float(vmin) - vmax = float(vmax) + vmin = float(self.vmin) + vmax = float(self.vmax) if cbook.iterable(value): val = ma.asarray(value) Modified: trunk/matplotlib/lib/matplotlib/dates.py =================================================================== --- trunk/matplotlib/lib/matplotlib/dates.py 2010-05-20 17:22:54 UTC (rev 8330) +++ trunk/matplotlib/lib/matplotlib/dates.py 2010-05-21 18:26:12 UTC (rev 8331) @@ -512,7 +512,7 @@ Return the number of units for each tick. """ return 1 - + def nonsingular(self, vmin, vmax): unit = self._get_unit() interval = self._get_interval() @@ -561,7 +561,7 @@ if estimate > self.MAXTICKS * 2: raise RuntimeError( 'RRuleLocator estimated to generate %d ticks from %s to %s: exceeds Locator.MAXTICKS * 2 (%d) ' % (estimate, dmin, dmax, self.MAXTICKS * 2)) - + dates = self.rule.between(dmin, dmax, True) if len(dates) == 0: return date2num([dmin, dmax]) @@ -597,7 +597,7 @@ def _get_interval(self): return self.rule._rrule._interval - + def autoscale(self): """ Set the view limits to include the data range. @@ -868,7 +868,7 @@ vmax = date2num(vmax) return self.nonsingular(vmin, vmax) - + class MonthLocator(RRuleLocator): """ Make ticks on occurances of each month month, eg 1, 3, 12. @@ -925,7 +925,7 @@ interval=interval, **self.hms0d) RRuleLocator.__init__(self, o, tz) - + class HourLocator(RRuleLocator): """ Make ticks on occurances of each hour. @@ -943,7 +943,7 @@ byminute=0, bysecond=0) RRuleLocator.__init__(self, rule, tz) - + class MinuteLocator(RRuleLocator): """ Make ticks on occurances of each minute. @@ -961,7 +961,7 @@ bysecond=0) RRuleLocator.__init__(self, rule, tz) - + class SecondLocator(RRuleLocator): """ Make ticks on occurances of each second. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <md...@us...> - 2010-05-27 12:43:39
|
Revision: 8338 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8338&view=rev Author: mdboom Date: 2010-05-27 12:43:32 +0000 (Thu, 27 May 2010) Log Message: ----------- Fix bug where Truetype fonts were being used to calculate text metrics, even when rcParam['text.usetex'] is True. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/backends/backend_agg.py trunk/matplotlib/lib/matplotlib/backends/backend_svg.py trunk/matplotlib/lib/matplotlib/text.py Modified: trunk/matplotlib/lib/matplotlib/backends/backend_agg.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_agg.py 2010-05-26 15:03:34 UTC (rev 8337) +++ trunk/matplotlib/lib/matplotlib/backends/backend_agg.py 2010-05-27 12:43:32 UTC (rev 8338) @@ -162,7 +162,7 @@ # texmanager more efficient. It is not meant to be used # outside the backend """ - if ismath=='TeX': + if rcParams['text.usetex']: # todo: handle props size = prop.get_size_in_points() texmanager = self.get_texmanager() Modified: trunk/matplotlib/lib/matplotlib/backends/backend_svg.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_svg.py 2010-05-26 15:03:34 UTC (rev 8337) +++ trunk/matplotlib/lib/matplotlib/backends/backend_svg.py 2010-05-27 12:43:32 UTC (rev 8338) @@ -800,7 +800,7 @@ return self.width, self.height def get_text_width_height_descent(self, s, prop, ismath): - if ismath == "TeX": + if rcParams['text.usetex']: size = prop.get_size_in_points() texmanager = self._text2path.get_texmanager() fontsize = prop.get_size_in_points() Modified: trunk/matplotlib/lib/matplotlib/text.py =================================================================== --- trunk/matplotlib/lib/matplotlib/text.py 2010-05-26 15:03:34 UTC (rev 8337) +++ trunk/matplotlib/lib/matplotlib/text.py 2010-05-27 12:43:32 UTC (rev 8338) @@ -565,27 +565,24 @@ else: renderer.draw_tex(gc, x, y, clean_line, self._fontproperties, angle) - gc.restore() - renderer.close_group('text') - return + else: + for line, wh, x, y in info: + x = x + posx + y = y + posy + if renderer.flipy(): + y = canvash-y + clean_line, ismath = self.is_math_text(line) - for line, wh, x, y in info: - 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(): + for path_effect in self.get_path_effects(): + path_effect.draw_text(renderer, gc, x, y, clean_line, + self._fontproperties, angle, + ismath=ismath) + else: + renderer.draw_text(gc, x, y, clean_line, + self._fontproperties, angle, + ismath=ismath) - if self.get_path_effects(): - for path_effect in self.get_path_effects(): - path_effect.draw_text(renderer, gc, x, y, clean_line, - self._fontproperties, angle, - ismath=ismath) - else: - renderer.draw_text(gc, x, y, clean_line, - self._fontproperties, angle, - ismath=ismath) - gc.restore() renderer.close_group('text') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ef...@us...> - 2010-05-31 19:41:26
|
Revision: 8352 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8352&view=rev Author: efiring Date: 2010-05-31 19:41:20 +0000 (Mon, 31 May 2010) Log Message: ----------- grid, box: allow 'on' or 'off' in place of boolean. Closes 2871949. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/axes.py trunk/matplotlib/lib/matplotlib/pyplot.py Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2010-05-31 18:45:39 UTC (rev 8351) +++ trunk/matplotlib/lib/matplotlib/axes.py 2010-05-31 19:41:20 UTC (rev 8352) @@ -39,6 +39,15 @@ is_string_like = cbook.is_string_like is_sequence_of_strings = cbook.is_sequence_of_strings +def _string_to_bool(s): + if not is_string_like(s): + return s + if s == 'on': + return True + if s == 'off': + return False + raise ValueError("string argument must be either 'on' or 'off'") + def _process_plot_format(fmt): """ Process a matlab(TM) style color/line style format string. Return a @@ -1954,7 +1963,8 @@ grid(self, b=None, **kwargs) - Set the axes grids on or off; *b* is a boolean + Set the axes grids on or off; *b* is a boolean. (For Matlab + compatibility, *b* may also be a string, 'on' or 'off'.) If *b* is *None* and ``len(kwargs)==0``, toggle the grid state. If *kwargs* are supplied, it is assumed that you want a grid and *b* @@ -1968,7 +1978,9 @@ %(Line2D)s """ - if len(kwargs): b = True + if len(kwargs): + b = True + b = _string_to_bool(b) self.xaxis.grid(b, **kwargs) self.yaxis.grid(b, **kwargs) Modified: trunk/matplotlib/lib/matplotlib/pyplot.py =================================================================== --- trunk/matplotlib/lib/matplotlib/pyplot.py 2010-05-31 18:45:39 UTC (rev 8351) +++ trunk/matplotlib/lib/matplotlib/pyplot.py 2010-05-31 19:41:20 UTC (rev 8352) @@ -12,7 +12,7 @@ from matplotlib.rcsetup import interactive_bk as _interactive_bk from matplotlib.artist import getp, get, Artist from matplotlib.artist import setp as _setp -from matplotlib.axes import Axes, Subplot +from matplotlib.axes import Axes, Subplot, _string_to_bool from matplotlib.projections import PolarAxes from matplotlib import mlab # for csv2rec, detrend_none, window_hanning from matplotlib.scale import get_scale_docs, get_scale_names @@ -886,10 +886,12 @@ def box(on=None): """ Turn the axes box on or off according to *on*. + *on* may be a boolean or a string, 'on' or 'off'. If *on* is *None*, toggle state. """ ax = gca() + on = _string_to_bool(on) if on is None: on = not ax.get_frame_on() ax.set_frame_on(on) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ef...@us...> - 2010-06-01 16:38:41
|
Revision: 8361 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8361&view=rev Author: efiring Date: 2010-06-01 16:38:34 +0000 (Tue, 01 Jun 2010) Log Message: ----------- contour: Jouni's patch to close 2797414 and 3009921; clabel with mathtext Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/contour.py trunk/matplotlib/lib/matplotlib/text.py Modified: trunk/matplotlib/lib/matplotlib/contour.py =================================================================== --- trunk/matplotlib/lib/matplotlib/contour.py 2010-06-01 03:11:39 UTC (rev 8360) +++ trunk/matplotlib/lib/matplotlib/contour.py 2010-06-01 16:38:34 UTC (rev 8361) @@ -17,6 +17,8 @@ import matplotlib.text as text import matplotlib.cbook as cbook import matplotlib.mlab as mlab +import matplotlib.mathtext as mathtext +import matplotlib.texmanager as texmanager # Import needed for adding manual selection capability to clabel from matplotlib.blocking_input import BlockingContourLabeler @@ -268,10 +270,21 @@ def get_label_width(self, lev, fmt, fsize): "get the width of the label in points" - if cbook.is_string_like(lev): + if not cbook.is_string_like(lev): + lev = self.get_text(lev, fmt) + + lev, ismath = text.Text.is_math_text(lev) + if ismath == 'TeX': + if not hasattr(self, '_TeX_manager'): + self._TeX_manager = texmanager.TexManager() + lw, _, _ = self._TeX_manager.get_text_width_height_descent(lev, fsize) + elif ismath: + if not hasattr(self, '_mathtext_parser'): + self._mathtext_parser = mathtext.MathTextParser('bitmap') + img, _ = self._mathtext_parser.parse(lev, dpi=72, prop=self.labelFontProps) + lw = img.get_width() # at dpi=72, the units are PostScript points + else: lw = (len(lev)) * fsize - else: - lw = (len(self.get_text(lev,fmt))) * fsize return lw @@ -330,7 +343,7 @@ if xsize == 1: ysize = nsize else: - ysize = labelwidth + ysize = int(labelwidth) XX = np.resize(linecontour[:,0],(xsize, ysize)) YY = np.resize(linecontour[:,1],(xsize, ysize)) Modified: trunk/matplotlib/lib/matplotlib/text.py =================================================================== --- trunk/matplotlib/lib/matplotlib/text.py 2010-06-01 03:11:39 UTC (rev 8360) +++ trunk/matplotlib/lib/matplotlib/text.py 2010-06-01 16:38:34 UTC (rev 8361) @@ -963,9 +963,14 @@ """ self._text = '%s' % (s,) - def is_math_text(self, s): + @staticmethod + def is_math_text(s): """ - Returns True if the given string *s* contains any mathtext. + Returns a cleaned string and a boolean flag. + The flag indicates if the given string *s* contains any mathtext, + determined by counting unescaped dollar signs. If no mathtext + is present, the cleaned string has its dollar signs unescaped. + If usetex is on, the flag always has the value "TeX". """ # Did we find an even number of non-escaped dollar signs? # If so, treat is as math text. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jd...@us...> - 2010-06-02 13:36:54
|
Revision: 8367 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8367&view=rev Author: jdh2358 Date: 2010-06-02 13:36:46 +0000 (Wed, 02 Jun 2010) Log Message: ----------- handle is None keys by returning Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/backend_bases.py trunk/matplotlib/lib/matplotlib/image.py Modified: trunk/matplotlib/lib/matplotlib/backend_bases.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backend_bases.py 2010-06-02 03:22:57 UTC (rev 8366) +++ trunk/matplotlib/lib/matplotlib/backend_bases.py 2010-06-02 13:36:46 UTC (rev 8367) @@ -2062,6 +2062,9 @@ # self.destroy() # how cruel to have to destroy oneself! # return + if event.key is None: + return + # Load key-mappings from your matplotlibrc file. fullscreen_keys = rcParams['keymap.fullscreen'] home_keys = rcParams['keymap.home'] @@ -2128,8 +2131,7 @@ ax.set_xscale('log') ax.figure.canvas.draw() - elif event.key is not None and \ - (event.key.isdigit() and event.key!='0') or event.key in all: + elif (event.key.isdigit() and event.key!='0') or event.key in all: # keys in list 'all' enables all axes (default key 'a'), # otherwise if key is a number only enable this particular axes # if it was the axes, where the event was raised Modified: trunk/matplotlib/lib/matplotlib/image.py =================================================================== --- trunk/matplotlib/lib/matplotlib/image.py 2010-06-02 03:22:57 UTC (rev 8366) +++ trunk/matplotlib/lib/matplotlib/image.py 2010-06-02 13:36:46 UTC (rev 8367) @@ -663,6 +663,13 @@ self._Ay = y self._imcache = None + # I am adding this in accor with _AxesImageBase.set_data -- + # examples/pylab_examples/image_nonuniform.py was breaking on + # the call to _get_unsampled_image when the oldxslice attr was + # accessed - JDH 3/3/2010 + self._oldxslice = None + self._oldyslice = None + def set_array(self, *args): raise NotImplementedError('Method not supported') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ef...@us...> - 2010-06-04 02:40:07
|
Revision: 8371 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8371&view=rev Author: efiring Date: 2010-06-04 02:40:00 +0000 (Fri, 04 Jun 2010) Log Message: ----------- axes: quick fix to make fill_between_demo work again Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/axes.py trunk/matplotlib/lib/matplotlib/colors.py trunk/matplotlib/lib/matplotlib/finance.py Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2010-06-02 21:56:39 UTC (rev 8370) +++ trunk/matplotlib/lib/matplotlib/axes.py 2010-06-04 02:40:00 UTC (rev 8371) @@ -6278,13 +6278,14 @@ if interpolate: def get_interp_point(ind): - x_values = x[ind-1:ind+1] - diff_values = y1[ind-1:ind+1] - y2[ind-1:ind+1] - y1_values = y1[ind-1:ind+1] + im1 = max(ind-1, 0) + x_values = x[im1:ind+1] + diff_values = y1[im1:ind+1] - y2[im1:ind+1] + y1_values = y1[im1:ind+1] if len(diff_values) == 2: if np.ma.is_masked(diff_values[1]): - return x[ind-1], y1[ind-1] + return x[im1], y1[im1] elif np.ma.is_masked(diff_values[0]): return x[ind], y1[ind] Modified: trunk/matplotlib/lib/matplotlib/colors.py =================================================================== --- trunk/matplotlib/lib/matplotlib/colors.py 2010-06-02 21:56:39 UTC (rev 8370) +++ trunk/matplotlib/lib/matplotlib/colors.py 2010-06-04 02:40:00 UTC (rev 8371) @@ -382,10 +382,17 @@ if (c.ravel() > 1).any() or (c.ravel() < 0).any(): raise ValueError( "number in rgba sequence is outside 0-1 range") - # looks like rgba already, nothing to be done; do - # we want to apply alpha here if - # (c[:,3]==1).all() ? - return np.asarray(c, np.float) + result = np.asarray(c, np.float) + if alpha is not None: + if alpha > 1 or alpha < 0: + raise ValueError("alpha must be in 0-1 range") + result[:,3] = alpha + return result + # This alpha operation above is new, and depends + # on higher levels to refrain from setting alpha + # to values other than None unless there is + # intent to override any existing alpha values. + # It must be some other sequence of color specs. result = np.zeros((nc, 4), dtype=np.float) for i, cc in enumerate(c): Modified: trunk/matplotlib/lib/matplotlib/finance.py =================================================================== --- trunk/matplotlib/lib/matplotlib/finance.py 2010-06-02 21:56:39 UTC (rev 8370) +++ trunk/matplotlib/lib/matplotlib/finance.py 2010-06-04 02:40:00 UTC (rev 8371) @@ -42,7 +42,7 @@ where d is a floating poing representation of date, as returned by date2num - if adjust=True, use adjusted prices + if adjusted=True, use adjusted prices """ results = [] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |