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 <[email protected]>
+
+ * 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.
------------------------------------------------------------------------------
The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your
production scanning environment may not be a perfect world - but thanks to
Kodak, there's a perfect scanner to get the job done! With the NEW KODAK i700
Series Scanner you'll get full speed at 300 dpi even with all image
processing features enabled. http://p.sf.net/sfu/kodak-com
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins