@@ -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 ()
0 commit comments