From: <lee...@us...> - 2009-05-05 03:28:01
|
Revision: 7084 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7084&view=rev Author: leejjoon Date: 2009-05-05 03:27:48 +0000 (Tue, 05 May 2009) Log Message: ----------- Better support for tick (tick label) color handling in axes_grid.axisline Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/text.py trunk/matplotlib/lib/mpl_toolkits/axes_grid/axislines.py trunk/matplotlib/lib/mpl_toolkits/axes_grid/inset_locator.py trunk/matplotlib/lib/mpl_toolkits/axes_grid/parasite_axes.py Added Paths: ----------- trunk/matplotlib/lib/mpl_toolkits/axes_grid/ChangeLog Modified: trunk/matplotlib/lib/matplotlib/text.py =================================================================== --- trunk/matplotlib/lib/matplotlib/text.py 2009-05-04 20:14:40 UTC (rev 7083) +++ trunk/matplotlib/lib/matplotlib/text.py 2009-05-05 03:27:48 UTC (rev 7084) @@ -235,7 +235,7 @@ thisx, thisy = 0.0, 0.0 xmin, ymin = 0.0, 0.0 width, height = 0.0, 0.0 - lines = self._text.split('\n') + lines = self.get_text().split('\n') whs = np.zeros((len(lines), 2)) horizLayout = np.zeros((len(lines), 4)) @@ -406,10 +406,10 @@ props = props.copy() # don't want to alter the pad externally pad = props.pop('pad', 4) pad = renderer.points_to_pixels(pad) - if self._text == "": + 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. @@ -451,7 +451,7 @@ if renderer is not None: self._renderer = renderer if not self.get_visible(): return - if self._text=='': return + if self.get_text()=='': return renderer.open_group('text', self.get_gid()) @@ -472,8 +472,8 @@ self._draw_bbox(renderer, posx, posy) gc = renderer.new_gc() - gc.set_foreground(self._color) - gc.set_alpha(self._alpha) + gc.set_foreground(self.get_color()) + gc.set_alpha(self.get_alpha()) gc.set_url(self._url) if self.get_clip_on(): gc.set_clip_rectangle(self.clipbox) @@ -604,7 +604,7 @@ need to know if the text has changed. """ x, y = self.get_position() - return (x, y, self._text, self._color, + return (x, y, self.get_text(), self._color, self._verticalalignment, self._horizontalalignment, hash(self._fontproperties), self._rotation, self.figure.dpi, id(self._renderer), @@ -650,7 +650,7 @@ if dpi is not None: dpi_orig = self.figure.dpi self.figure.dpi = dpi - if self._text == '': + if self.get_text() == '': tx, ty = self._get_xy_display() return Bbox.from_bounds(tx,ty,0,0) Added: trunk/matplotlib/lib/mpl_toolkits/axes_grid/ChangeLog =================================================================== --- trunk/matplotlib/lib/mpl_toolkits/axes_grid/ChangeLog (rev 0) +++ trunk/matplotlib/lib/mpl_toolkits/axes_grid/ChangeLog 2009-05-05 03:27:48 UTC (rev 7084) @@ -0,0 +1,8 @@ +2009-05-04 Jae-Joon Lee <lee...@gm...> + + * inset_locator.py (inset_axes, zoomed_inset_axes): axes_class support + + * axislines.py : Better support for tick (tick label) color + handling + (Axes.get_children): fix typo + Modified: trunk/matplotlib/lib/mpl_toolkits/axes_grid/axislines.py =================================================================== --- trunk/matplotlib/lib/mpl_toolkits/axes_grid/axislines.py 2009-05-04 20:14:40 UTC (rev 7083) +++ trunk/matplotlib/lib/mpl_toolkits/axes_grid/axislines.py 2009-05-05 03:27:48 UTC (rev 7084) @@ -200,16 +200,18 @@ nth_coord = 1 elif loc in ["bottom", "top"]: nth_coord = 0 + + self.nth_coord = nth_coord + self.axis = [self.axes.xaxis, self.axes.yaxis][self.nth_coord] + + super(AxisLineHelper.Fixed, self).__init__(loc) + if passingthrough_point is None: passingthrough_point = self._default_passthru_pt[loc] if label_direction is None: label_direction = loc - super(AxisLineHelper.Fixed, self).__init__(loc) - self.nth_coord = nth_coord - self.axis = [self.axes.xaxis, self.axes.yaxis][self.nth_coord] - self.passthru_pt = passingthrough_point _verts = np.array([[0., 0.], @@ -456,11 +458,48 @@ def __init__(self, ticksize, **kwargs): self.ticksize = ticksize self.locs_angles = [] + + self._axis = kwargs.pop("axis", None) + if self._axis is not None: + if "color" not in kwargs: + kwargs["color"] = "auto" + if ("mew" not in kwargs) and ("markeredgewidth" not in kwargs): + kwargs["markeredgewidth"] = "auto" + super(Ticks, self).__init__([0.], [0.], **kwargs) - #self.set_color("k") - self.set_mec("k") - self.set_mew(0.5) + + def get_color(self): + if self._color == 'auto': + if self._axis is not None: + ticklines = self._axis.get_ticklines() + if ticklines: + color_from_axis = ticklines[0].get_color() + return color_from_axis + return "k" + + return super(Ticks, self).get_color() + + + def get_markeredgecolor(self): + if self._markeredgecolor == 'auto': + return self.get_color() + else: + return self._markeredgecolor + + def get_markeredgewidth(self): + if self._markeredgewidth == 'auto': + if self._axis is not None: + ticklines = self._axis.get_ticklines() + if ticklines: + width_from_axis = ticklines[0].get_markeredgewidth() + return width_from_axis + return .5 + + else: + return self._markeredgewidth + + def update_locs_angles(self, locs_angles, renderer): self.locs_angles = locs_angles @@ -494,7 +533,7 @@ gc = renderer.new_gc() self._set_gc_clip(gc) gc.set_foreground(self.get_markeredgecolor()) - gc.set_linewidth(self._markeredgewidth) + gc.set_linewidth(self.get_markeredgewidth()) gc.set_alpha(self._alpha) offset = renderer.points_to_pixels(size) @@ -515,16 +554,33 @@ class TickLabels(mtext.Text): - def __init__(self, size, color): + def __init__(self, size, **kwargs): self._locs_labels = [] + self._axis = kwargs.pop("axis", None) + if self._axis is not None: + if "color" not in kwargs: + kwargs["color"] = "auto" + super(TickLabels, self).__init__(x=0., y=0., text="", - color=color, + **kwargs ) def update_locs_labels(self, locs_labels, renderer): self._locs_labels = locs_labels + def get_color(self): + if self._color == 'auto': + if self._axis is not None: + ticklabels = self._axis.get_ticklabels() + if ticklabels: + color_from_axis = ticklabels[0].get_color() + return color_from_axis + return "k" + + return super(TickLabels, self).get_color() + + def draw(self, renderer): if not self.get_visible(): return @@ -549,6 +605,34 @@ #else: # return Bbox.from_bounds(0, 0, 0, 0) + +class AxisLabel(mtext.Text): + def __init__(self, *kl, **kwargs): + self._axis = kwargs.pop("axis", None) + if self._axis is not None: + if "color" not in kwargs: + kwargs["color"] = "auto" + + super(AxisLabel, self).__init__(*kl, **kwargs) + + def get_color(self): + if self._color == 'auto': + if self._axis is not None: + label = self._axis.get_label() + if label: + color_from_axis = label.get_color() + return color_from_axis + return "k" + + return super(AxisLabel, self).get_color() + + def get_text(self): + t = super(AxisLabel, self).get_text() + if t == "__from_axes__": + return self._axis.get_label().get_text() + return self._text + + class AxisGridLineBase(martist.Artist): def __init__(self, *kl, **kw): super(AxisGridLineBase, self).__init__(*kl, **kw) @@ -599,9 +683,9 @@ if self._helper.label_direction in ["left", "right"]: + axis_name = "ytick" + else: axis_name = "xtick" - else: - axis_name = "ytick" if major_tick_size is None: @@ -638,12 +722,13 @@ transform=self._helper.get_tick_transform()+self.offset_transform - self.major_ticks = Ticks(self.major_tick_size, transform=transform) - self.minor_ticks = Ticks(self.minor_tick_size, transform=transform) + self.major_ticks = Ticks(self.major_tick_size, + transform=transform) + self.minor_ticks = Ticks(self.minor_tick_size, + transform=transform) size = rcParams['xtick.labelsize'] - color = rcParams['xtick.color'] fontprops = font_manager.FontProperties(size=size) tvhl = self._helper.get_ticklabel_transform(self.major_tick_pad, @@ -652,10 +737,14 @@ trans=transform) trans, vert, horiz, label_a = tvhl - self.major_ticklabels = TickLabels(size, color) - self.minor_ticklabels = TickLabels(size, color) + color = rcParams['xtick.color'] + self.major_ticklabels = TickLabels(size, color=color) + self.minor_ticklabels = TickLabels(size, color=color) + #self.major_ticklabels = TickLabels(size, axis=self.axis) + #self.minor_ticklabels = TickLabels(size, axis=self.axis) + self.major_ticklabels.set(figure = self.axes.figure, rotation = label_a, transform=trans, @@ -724,10 +813,10 @@ color = rcParams['axes.labelcolor'], ) - self.label = mtext.Text(0, 0, "__from_axes__", - fontproperties=fontprops, - color = rcParams['axes.labelcolor'], - ) + self.label = AxisLabel(0, 0, "", + fontproperties=fontprops, + color = rcParams['axes.labelcolor'], + ) self.label.set_figure(self.axes.figure) #self._set_artist_props(label) @@ -752,15 +841,16 @@ transform=tr2, va=va, ha=ha, rotation=a) - if self.label.get_text() == "__from_axes__": - label_text = self._helper.axis.get_label().get_text() - self.label.set_text(label_text) - self.label.draw(renderer) - self.label.set_text("__from_axes__") - else: - self.label.draw(renderer) +# if self.label.get_text() == "__from_axes__": +# label_text = self.axis.get_label().get_text() +# self.label.set_text(label_text) +# self.label.draw(renderer) +# self.label.set_text("__from_axes__") +# else: + self.label.draw(renderer) + def set_label(self, s): self.label.set_text(s) @@ -857,9 +947,11 @@ if self._helper.label_direction in ["left", "right"]: + axis_name = "ytick" + self.axis = axes.yaxis + else: axis_name = "xtick" - else: - axis_name = "ytick" + self.axis = axes.xaxis if major_tick_size is None: @@ -897,12 +989,15 @@ transform=self._helper.get_tick_transform()+self.offset_transform - self.major_ticks = Ticks(self.major_tick_size, transform=transform) - self.minor_ticks = Ticks(self.minor_tick_size, transform=transform) + self.major_ticks = Ticks(self.major_tick_size, + axis=self.axis, + transform=transform) + self.minor_ticks = Ticks(self.minor_tick_size, + axis=self.axis, + transform=transform) size = rcParams['xtick.labelsize'] - color = rcParams['xtick.color'] fontprops = font_manager.FontProperties(size=size) tvhl = self._helper.get_ticklabel_transform(self.major_tick_pad, @@ -911,10 +1006,14 @@ trans=transform) trans, vert, horiz, label_a = tvhl - self.major_ticklabels = TickLabels(size, color) - self.minor_ticklabels = TickLabels(size, color) + #color = rcParams['xtick.color'] + #self.major_ticklabels = TickLabels(size, color=color) + #self.minor_ticklabels = TickLabels(size, color=color) + self.major_ticklabels = TickLabels(size, axis=self.axis) + self.minor_ticklabels = TickLabels(size, axis=self.axis) + self.major_ticklabels.set(figure = self.axes.figure, rotation = label_a, transform=trans, @@ -1022,10 +1121,12 @@ color = rcParams['axes.labelcolor'], ) - self.label = mtext.Text(0, 0, "__from_axes__", - fontproperties=fontprops, - color = rcParams['axes.labelcolor'], - ) + self.label = AxisLabel(0, 0, "__from_axes__", + color = "auto", #rcParams['axes.labelcolor'], + fontproperties=fontprops, + axis=self.axis, + ) + self.label.set_figure(self.axes.figure) #self._set_artist_props(label) @@ -1050,15 +1151,16 @@ transform=tr2, va=va, ha=ha, rotation=a) - if self.label.get_text() == "__from_axes__": - label_text = self._helper.axis.get_label().get_text() - self.label.set_text(label_text) - self.label.draw(renderer) - self.label.set_text("__from_axes__") - else: - self.label.draw(renderer) +# if self.label.get_text() == "__from_axes__": +# label_text = self._helper.axis.get_label().get_text() +# self.label.set_text(label_text) +# self.label.draw(renderer) +# self.label.set_text("__from_axes__") +# else: + self.label.draw(renderer) + def set_label(self, s): self.label.set_text(s) @@ -1208,7 +1310,7 @@ if self._axisline_on: children = self._axislines.values()+[self.gridlines] else: - cildren = [] + children = [] children.extend(super(Axes, self).get_children()) return children @@ -1253,15 +1355,16 @@ continue if axisline.label.get_visible(): - if axisline.label.get_text() == "__from_axes__": - label_text = axisline._helper.axis.get_label().get_text() - axisline.label.set_text(label_text) - bb.append(axisline.label.get_window_extent(renderer)) - axisline.label.set_text("__from_axes__") - else: - bb.append(axisline.label.get_window_extent(renderer)) +# if axisline.label.get_text() == "__from_axes__": +# label_text = axisline._helper.axis.get_label().get_text() +# axisline.label.set_text(label_text) +# bb.append(axisline.label.get_window_extent(renderer)) +# axisline.label.set_text("__from_axes__") +# else: + bb.append(axisline.label.get_window_extent(renderer)) + if axisline.major_ticklabels.get_visible(): bb.extend(axisline.major_ticklabels.get_window_extents(renderer)) if axisline.minor_ticklabels.get_visible(): Modified: trunk/matplotlib/lib/mpl_toolkits/axes_grid/inset_locator.py =================================================================== --- trunk/matplotlib/lib/mpl_toolkits/axes_grid/inset_locator.py 2009-05-04 20:14:40 UTC (rev 7083) +++ trunk/matplotlib/lib/mpl_toolkits/axes_grid/inset_locator.py 2009-05-05 03:27:48 UTC (rev 7084) @@ -246,9 +246,13 @@ def inset_axes(parent_axes, width, height, loc=1, bbox_to_anchor=None, bbox_transform=None, + axes_class=None, axes_kwargs=None, **kwargs): + if axes_class is None: + axes_class = Axes + if axes_kwargs is None: inset_axes = Axes(parent_axes.figure, parent_axes.get_position()) else: @@ -268,24 +272,24 @@ def zoomed_inset_axes(parent_axes, zoom, loc=1, bbox_to_anchor=None, bbox_transform=None, + axes_class=None, axes_kwargs=None, - connects=None, **kwargs): + if axes_class is None: + axes_class = Axes + if axes_kwargs is None: - inset_axes = Axes(parent_axes.figure, parent_axes.get_position()) + inset_axes = axes_class(parent_axes.figure, parent_axes.get_position()) else: - inset_axes = Axes(parent_axes.figure, parent_axes.get_position(), - **axes_kwargs) + inset_axes = axes_class(parent_axes.figure, parent_axes.get_position(), + **axes_kwargs) axes_locator = AnchoredZoomLocator(parent_axes, zoom=zoom, loc=loc) inset_axes.set_axes_locator(axes_locator) _add_inset_axes(parent_axes, inset_axes) - if connects is not None: - pass - return inset_axes Modified: trunk/matplotlib/lib/mpl_toolkits/axes_grid/parasite_axes.py =================================================================== --- trunk/matplotlib/lib/mpl_toolkits/axes_grid/parasite_axes.py 2009-05-04 20:14:40 UTC (rev 7083) +++ trunk/matplotlib/lib/mpl_toolkits/axes_grid/parasite_axes.py 2009-05-05 03:27:48 UTC (rev 7084) @@ -287,13 +287,21 @@ ax2 = ParasiteAxes(self, sharex=self, frameon=False) self.parasites.append(ax2) + + # for normal axes + self.yaxis.tick_left() + ax2.xaxis.set_visible(False) + ax2.yaxis.tick_right() + ax2.yaxis.set_label_position('right') + + # for axisline axes self._axislines["right"].set_visible(False) - ax2.xaxis.set_visible(False) ax2._axislines["left"].set_visible(False) ax2._axislines["right"].set_visible(True) ax2._axislines["right"].major_ticklabels.set_visible(True) ax2._axislines["right"].label.set_visible(True) - self.yaxis.tick_left() + + return ax2 def twiny(self): @@ -310,11 +318,20 @@ ax2 = ParasiteAxes(self, sharey=self, frameon=False) self.parasites.append(ax2) - ax2.xaxis.set_visible(True) + + # for normal axes + self.xaxis.tick_bottom() ax2.yaxis.set_visible(False) ax2.xaxis.tick_top() ax2.xaxis.set_label_position('top') - self.xaxis.tick_bottom() + + # for axisline axes + self._axislines["top"].set_visible(False) + ax2._axislines["bottom"].set_visible(False) + ax2._axislines["top"].set_visible(True) + ax2._axislines["top"].major_ticklabels.set_visible(True) + ax2._axislines["top"].label.set_visible(True) + return ax2 def twin(self, aux_trans=None): @@ -339,6 +356,16 @@ ) self.parasites.append(ax2) + + # for normal axes + self.yaxis.tick_left() + self.xaxis.tick_bottom() + ax2.yaxis.tick_right() + ax2.yaxis.set_label_position('right') + ax2.xaxis.tick_top() + ax2.xaxis.set_label_position('top') + + # for axisline axes self._axislines["right"].set_visible(False) self._axislines["top"].set_visible(False) ax2._axislines["left"].set_visible(False) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |