@@ -3884,70 +3884,38 @@ def bxp(self, bxpstats, positions=None, widths=None, vert=True,
3884
3884
zorder = mlines .Line2D .zorder
3885
3885
3886
3886
zdelta = 0.1
3887
+
3888
+ def with_rcdefaults (subkey , explicit , zdelta = 0 ):
3889
+ d = {k .split ('.' )[- 1 ]: v for k , v in rcParams .items ()
3890
+ if k .startswith (f'boxplot.{ subkey } ' )}
3891
+ d ['zorder' ] = zorder + zdelta
3892
+ if explicit is not None :
3893
+ d .update (explicit )
3894
+ return d
3895
+
3887
3896
# box properties
3888
- final_boxprops = dict (
3889
- linestyle = rcParams ['boxplot.boxprops.linestyle' ],
3890
- linewidth = rcParams ['boxplot.boxprops.linewidth' ],
3891
- )
3892
3897
if patch_artist :
3893
- final_boxprops .update (
3898
+ final_boxprops = dict (
3899
+ linestyle = rcParams ['boxplot.boxprops.linestyle' ],
3900
+ linewidth = rcParams ['boxplot.boxprops.linewidth' ],
3894
3901
edgecolor = rcParams ['boxplot.boxprops.color' ],
3895
3902
facecolor = ('white' if rcParams ['_internal.classic_mode' ] else
3896
3903
rcParams ['patch.facecolor' ]),
3904
+ zorder = zorder ,
3897
3905
)
3906
+ if boxprops is not None :
3907
+ final_boxprops .update (boxprops )
3898
3908
else :
3899
- final_boxprops .update (
3900
- color = rcParams ['boxplot.boxprops.color' ],
3901
- )
3902
-
3903
- final_boxprops ['zorder' ] = zorder
3904
- if boxprops is not None :
3905
- final_boxprops .update (boxprops )
3906
-
3907
- # whisker properties
3908
- final_whiskerprops = {
3909
- k .split ('.' )[- 1 ]: v for k , v in rcParams .items ()
3910
- if k .startswith ('boxplot.whiskerprops' )
3911
- }
3912
- final_whiskerprops ['zorder' ] = zorder
3913
- if whiskerprops is not None :
3914
- final_whiskerprops .update (whiskerprops )
3915
- # cap properties
3916
- final_capprops = {
3917
- k .split ('.' )[- 1 ]: v for k , v in rcParams .items ()
3918
- if k .startswith ('boxplot.capprops' )
3919
- }
3920
- final_capprops ['zorder' ] = zorder
3921
- if capprops is not None :
3922
- final_capprops .update (capprops )
3923
- # flier properties
3924
- final_flierprops = {
3925
- k .split ('.' )[- 1 ]: v for k , v in rcParams .items ()
3926
- if k .startswith ('boxplot.flierprops' )
3927
- }
3928
- final_flierprops ['zorder' ] = zorder
3929
- if flierprops is not None :
3930
- final_flierprops .update (flierprops )
3931
- # median line properties
3932
- final_medianprops = {
3933
- k .split ('.' )[- 1 ]: v for k , v in rcParams .items ()
3934
- if k .startswith ('boxplot.medianprops' )
3935
- }
3936
- final_medianprops ['zorder' ] = zorder + zdelta
3937
- if medianprops is not None :
3938
- final_medianprops .update (medianprops )
3939
- # mean (line or point) properties
3940
- final_meanprops = {
3941
- k .split ('.' )[- 1 ]: v for k , v in rcParams .items ()
3942
- if k .startswith ('boxplot.meanprops' )
3943
- }
3944
- if meanline :
3945
- final_meanprops ['marker' ] = ''
3946
- else :
3947
- final_meanprops ['linestyle' ] = ''
3948
- final_meanprops ['zorder' ] = zorder + zdelta
3949
- if meanprops is not None :
3950
- final_meanprops .update (meanprops )
3909
+ final_boxprops = with_rcdefaults ('boxprops' , boxprops )
3910
+ final_whiskerprops = with_rcdefaults ('whiskerprops' , whiskerprops )
3911
+ final_capprops = with_rcdefaults ('capprops' , capprops )
3912
+ final_flierprops = with_rcdefaults ('flierprops' , flierprops )
3913
+ final_medianprops = with_rcdefaults ('medianprops' , medianprops , zdelta )
3914
+ final_meanprops = with_rcdefaults ('meanprops' , meanprops , zdelta )
3915
+ removed_prop = 'marker' if meanline else 'linestyle'
3916
+ # Only remove the property if it's not set explicitly as a parameter.
3917
+ if meanprops is None or removed_prop not in meanprops :
3918
+ final_meanprops [removed_prop ] = ''
3951
3919
3952
3920
def to_vc (xs , ys ):
3953
3921
# convert arguments to verts and codes, append (0, 0) (ignored).
0 commit comments