@@ -423,13 +423,31 @@ def draw(self, renderer):
423423 self ._antialiaseds , self ._urls ,
424424 "screen" )
425425
426- renderer .draw_path_collection (
427- gc , transform .frozen (), paths ,
428- self .get_transforms (), offsets , offset_trf ,
429- self .get_facecolor (), self .get_edgecolor (),
430- self ._linewidths , self ._linestyles ,
431- self ._antialiaseds , self ._urls ,
432- "screen" ) # offset_position, kept for backcompat.
426+ fcolor = itertools .cycle (facecolors ) if facecolors .any () \
427+ else itertools .repeat ([])
428+ ecolor = itertools .cycle (edgecolors ) if edgecolors .any () \
429+ else itertools .repeat ([])
430+ lwidth = itertools .cycle (self ._linewidths )
431+ lstyle = itertools .cycle (self ._linestyles )
432+ antialiased = itertools .cycle (self ._antialiaseds )
433+
434+ if self ._match_original :
435+ for idx in range (len (paths )):
436+ gc .set_hatch (self ._hatch [idx ])
437+ renderer .draw_path_collection (
438+ gc , transform .frozen (), [paths [idx ]],
439+ self .get_transforms (), offsets , offset_trf ,
440+ [next (fcolor )], [next (ecolor )], [next (lwidth )], [next (lstyle )],
441+ [next (antialiased )], self ._urls ,
442+ "screen" ) # offset_position, kept for backcompat.
443+ else :
444+ renderer .draw_path_collection (
445+ gc , transform .frozen (), paths ,
446+ self .get_transforms (), offsets , offset_trf ,
447+ self .get_facecolor (), self .get_edgecolor (),
448+ self ._linewidths , self ._linestyles ,
449+ self ._antialiaseds , self ._urls ,
450+ "screen" )
433451
434452 gc .restore ()
435453 renderer .close_group (self .__class__ .__name__ )
@@ -1844,22 +1862,21 @@ def __init__(self, patches, *, match_original=False, **kwargs):
18441862 a call to `~.ScalarMappable.set_array`), at draw time a call to scalar
18451863 mappable will be made to set the face colors.
18461864 """
1865+ self ._match_original = False
18471866
18481867 if match_original :
1868+ self ._match_original = True
18491869 kwargs ['facecolors' ] = [p .get_facecolor () for p in patches ]
18501870 kwargs ['linewidths' ] = [p .get_linewidth () for p in patches ]
18511871 kwargs ['linestyles' ] = [p .get_linestyle () for p in patches ]
18521872 kwargs ['antialiaseds' ] = [p .get_antialiased () for p in patches ]
1873+ kwargs ['hatch' ] = [p .get_hatch () for p in patches ]
18531874
18541875 # Edgecolors are handled separately because are defaulted to None
18551876 # and the Hatch colors depend on them.
1856- if any (p ._original_edgecolor is not None for p in patches ):
1877+ if all (p ._original_edgecolor is not None for p in patches ):
18571878 kwargs ["edgecolors" ] = [p .get_edgecolor () for p in patches ]
18581879
1859- # Using the hatch of only the first patch
1860- if patches :
1861- kwargs ['hatch' ] = patches [0 ].get_hatch ()
1862-
18631880 super ().__init__ (** kwargs )
18641881
18651882 self .set_paths (patches )
0 commit comments