Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a2a7fa1

Browse files
committed
add zorder to figure drawing
svn path=/trunk/matplotlib/; revision=7994
1 parent f21eb65 commit a2a7fa1

4 files changed

Lines changed: 47 additions & 19 deletions

File tree

doc/pyplots/pyplot_simple.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
import matplotlib.pyplot as plt
2-
plt.plot([1,2,3])
2+
plt.plot([1,2,3,4])
33
plt.ylabel('some numbers')
44
plt.show()

examples/pylab_examples/figimage_demo.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
Z.shape = 100,100
1313
Z[:,50:] = 1.
1414

15+
ax = fig.add_subplot(111)
16+
ax.grid(True)
17+
1518
im1 = plt.figimage(Z, xo=50, yo=0, cmap=cm.jet, origin='lower')
1619
im2 = plt.figimage(Z, xo=100, yo=100, alpha=.8, cmap=cm.jet, origin='lower')
1720

lib/matplotlib/figure.py

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,8 @@ def figimage(self, X,
343343
cmap=None,
344344
vmin=None,
345345
vmax=None,
346-
origin=None):
346+
origin=None,
347+
**kwargs):
347348
"""
348349
call signatures::
349350
@@ -393,11 +394,14 @@ def figimage(self, X,
393394
394395
.. plot:: mpl_examples/pylab_examples/figimage_demo.py
395396
397+
398+
Additional kwargs are Artist kwargs passed on to
399+
:class:`~matplotlib.image.FigureImage`
396400
"""
397401

398402
if not self._hold: self.clf()
399403

400-
im = FigureImage(self, cmap, norm, xo, yo, origin)
404+
im = FigureImage(self, cmap, norm, xo, yo, origin, **kwargs)
401405
im.set_array(X)
402406
im.set_alpha(alpha)
403407
if norm is None:
@@ -735,10 +739,19 @@ def draw(self, renderer):
735739

736740
if self.frameon: self.patch.draw(renderer)
737741

742+
# a list of (zorder, func_to_call, list_of_args)
743+
dsu = []
744+
745+
738746
# todo: respect zorder
739-
for p in self.patches: p.draw(renderer)
740-
for l in self.lines: l.draw(renderer)
741-
for a in self.artists: a.draw(renderer)
747+
for a in self.patches:
748+
dsu.append( (a.get_zorder(), a.draw, [renderer]))
749+
750+
for a in self.lines:
751+
dsu.append( (a.get_zorder(), a.draw, [renderer]))
752+
753+
for a in self.artists:
754+
dsu.append( (a.get_zorder(), a.draw, [renderer]))
742755

743756
# override the renderer default if self.suppressComposite
744757
# is not None
@@ -747,8 +760,8 @@ def draw(self, renderer):
747760
composite = self.suppressComposite
748761

749762
if len(self.images)<=1 or composite or not allequal([im.origin for im in self.images]):
750-
for im in self.images:
751-
im.draw(renderer)
763+
for a in self.images:
764+
dsu.append( (a.get_zorder(), a.draw, [renderer]))
752765
else:
753766
# make a composite image blending alpha
754767
# list of (_image.Image, ox, oy)
@@ -762,20 +775,32 @@ def draw(self, renderer):
762775

763776
im.is_grayscale = False
764777
l, b, w, h = self.bbox.bounds
765-
gc = renderer.new_gc()
766-
gc.set_clip_rectangle(self.bbox)
767-
gc.set_clip_path(self.get_clip_path())
768-
renderer.draw_image(gc, l, b, im)
769-
gc.restore()
778+
779+
def draw_composite():
780+
gc = renderer.new_gc()
781+
gc.set_clip_rectangle(self.bbox)
782+
gc.set_clip_path(self.get_clip_path())
783+
renderer.draw_image(gc, l, b, im)
784+
gc.restore()
785+
786+
if len(ims):
787+
dsu.append((ims[0].get_zorder(), draw_composite, []))
770788

771789
# render the axes
772-
for a in self.axes: a.draw(renderer)
790+
for a in self.axes:
791+
dsu.append( (a.get_zorder(), a.draw, [renderer]))
773792

774793
# render the figure text
775-
for t in self.texts: t.draw(renderer)
794+
for a in self.texts:
795+
dsu.append( (a.get_zorder(), a.draw, [renderer]))
796+
797+
for a in self.legends:
798+
dsu.append( (a.get_zorder(), a.draw, [renderer]))
776799

777-
for legend in self.legends:
778-
legend.draw(renderer)
800+
801+
dsu.sort()
802+
for zorder, func, args in dsu:
803+
func(*args)
779804

780805
renderer.close_group('figure')
781806

@@ -1045,7 +1070,7 @@ def savefig(self, *args, **kwargs):
10451070
if args and is_string_like(args[0]) and '.' not in args[0] and extension != 'auto':
10461071
fname = args[0] + '.' + extension
10471072
args = (fname,) + args[1:]
1048-
1073+
10491074
transparent = kwargs.pop('transparent', False)
10501075
if transparent:
10511076
original_figure_alpha = self.patch.get_alpha()

lib/matplotlib/pyplot.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ def figimage(*args, **kwargs):
401401
# allow callers to override the hold state by passing hold=True|False
402402
ret = gcf().figimage(*args, **kwargs)
403403
draw_if_interactive()
404-
sci(ret)
404+
#sci(ret) # JDH figimage should not set current image -- it is not mappable, etc
405405
return ret
406406

407407
def figlegend(handles, labels, loc, **kwargs):

0 commit comments

Comments
 (0)