diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index 934c5677ac13..0c4ab7f9a65c 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -4095,7 +4095,7 @@ def bxp(self, bxpstats, positions=None, widths=None, vert=True, capwidths : float or array-like, default: None Either a scalar or a vector and sets the width of each cap. - The default is ``0.5*(with of the box)``, see *widths*. + The default is ``0.5*(width of the box)``, see *widths*. vert : bool, default: True If `True` (default), makes the boxes vertical. @@ -4147,6 +4147,17 @@ def bxp(self, bxpstats, positions=None, widths=None, vert=True, -------- .. plot:: gallery/statistics/bxp.py """ + # Clamp median line to edge of box by default. + medianprops = { + "solid_capstyle": "butt", + "dash_capstyle": "butt", + **(medianprops or {}), + } + meanprops = { + "solid_capstyle": "butt", + "dash_capstyle": "butt", + **(meanprops or {}), + } # lists of artists to be output whiskers = [] diff --git a/lib/matplotlib/tests/baseline_images/test_axes/boxplot.pdf b/lib/matplotlib/tests/baseline_images/test_axes/boxplot.pdf index 55264db5d1f9..c34dddea28c9 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/boxplot.pdf and b/lib/matplotlib/tests/baseline_images/test_axes/boxplot.pdf differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_autorange_false_whiskers.png b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_autorange_false_whiskers.png index 05ae97248c8f..14675de05163 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_autorange_false_whiskers.png and b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_autorange_false_whiskers.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_autorange_true_whiskers.png b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_autorange_true_whiskers.png index 2ef5936b2db7..c6f11f0411ae 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_autorange_true_whiskers.png and b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_autorange_true_whiskers.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_custom_capwidths.png b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_custom_capwidths.png index 7bccd2c18e97..6282584ca548 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_custom_capwidths.png and b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_custom_capwidths.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_mod_artists_after_plotting.png b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_mod_artists_after_plotting.png index 1a7553254c60..fc91c7911723 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_mod_artists_after_plotting.png and b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_mod_artists_after_plotting.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_no_inverted_whisker.png b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_no_inverted_whisker.png index ec7107aea080..803db84f2dc2 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_no_inverted_whisker.png and b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_no_inverted_whisker.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_rc_parameters.pdf b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_rc_parameters.pdf index 57e0fb494244..cc9433bebd31 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_rc_parameters.pdf and b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_rc_parameters.pdf differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_rc_parameters.png b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_rc_parameters.png index 61507b39c9cc..07b8a5da7247 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_rc_parameters.png and b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_rc_parameters.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_sym.png b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_sym.png index 7037ca022975..9ac36a98b2ae 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_sym.png and b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_sym.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_sym2.png b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_sym2.png index c9a1e8826741..a3095f5dc26f 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_sym2.png and b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_sym2.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_with_CIarray.png b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_with_CIarray.png index 3bf1c27df947..d830e2355492 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/boxplot_with_CIarray.png and b/lib/matplotlib/tests/baseline_images/test_axes/boxplot_with_CIarray.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_baseline.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_baseline.png index fdaf2e157961..44de05620d19 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_baseline.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_baseline.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_custom_capwidth.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_custom_capwidth.png index cf5bc41bdbee..2e7c530beecf 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_custom_capwidth.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_custom_capwidth.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_custom_capwidths.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_custom_capwidths.png index 936bd18a2b6c..1d8e44ccbecd 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_custom_capwidths.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_custom_capwidths.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_custombox.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_custombox.png index 19e3731575c7..587ac5e68b43 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_custombox.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_custombox.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_customcap.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_customcap.png index cced1e51566e..3323a7e4e1ec 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_customcap.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_customcap.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_customoutlier.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_customoutlier.png index 698bc40f15c2..901309e6fa62 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_customoutlier.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_customoutlier.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_custompatchartist.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_custompatchartist.png index 32c9229da00a..234f2941bdc0 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_custompatchartist.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_custompatchartist.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_custompositions.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_custompositions.png index 4333291d745f..6c9d4a8e2a67 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_custompositions.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_custompositions.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_customwhisker.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_customwhisker.png index d7c586645809..efd3a3e136c9 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_customwhisker.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_customwhisker.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_customwidths.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_customwidths.png index 63f37ded24c0..d7d8bb264281 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_customwidths.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_customwidths.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_horizontal.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_horizontal.png index 0c2c9935f29e..210dea241397 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_horizontal.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_horizontal.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_no_flier_stats.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_no_flier_stats.png index 87bb56b464b6..df216d72ca12 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_no_flier_stats.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_no_flier_stats.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_nobox.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_nobox.png index 89a7112dc853..11a23c2ecedf 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_nobox.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_nobox.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_nocaps.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_nocaps.png index 4d8b9c38e087..76bb606ba6c5 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_nocaps.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_nocaps.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_patchartist.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_patchartist.png index e41e21f3e50c..9b027f3bacd2 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_patchartist.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_patchartist.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_percentilewhis.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_percentilewhis.png index 93921f74e49f..29853ae8d778 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_percentilewhis.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_percentilewhis.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_rangewhis.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_rangewhis.png index bb1997317252..d9dc4379c6ae 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_rangewhis.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_rangewhis.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_scalarwidth.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_scalarwidth.png index aaa884632195..38a0563aeb0f 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_scalarwidth.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_scalarwidth.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_with_xlabels.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_with_xlabels.png index a47dc0a47d21..f864ac1c4267 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_with_xlabels.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_with_xlabels.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_with_ylabels.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_with_ylabels.png index b65a77e86687..af0fb83ddd22 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_with_ylabels.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_with_ylabels.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_withmean_custompoint.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_withmean_custompoint.png index 45a0fac0fe81..fe7b0d37fb12 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_withmean_custompoint.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_withmean_custompoint.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_withmean_line.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_withmean_line.png index 966cc5a559cd..279a9dd1c8b5 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_withmean_line.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_withmean_line.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_withmean_point.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_withmean_point.png index 9d47676beee5..ad938d741ac9 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_withmean_point.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_withmean_point.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bxp_withnotch.png b/lib/matplotlib/tests/baseline_images/test_axes/bxp_withnotch.png index 1eae658a2ac0..63542a4007bd 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_axes/bxp_withnotch.png and b/lib/matplotlib/tests/baseline_images/test_axes/bxp_withnotch.png differ diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index 6c970cdbeb3c..c97cac3706fb 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -3223,6 +3223,15 @@ def test_bxp_customwhisker(): whiskerprops=dict(linestyle='-', color='m', lw=3))) +@check_figures_equal() +def test_boxplot_median_bound_by_box(fig_test, fig_ref): + data = np.arange(3) + medianprops_test = {"linewidth": 12} + medianprops_ref = {**medianprops_test, "solid_capstyle": "butt"} + fig_test.subplots().boxplot(data, medianprops=medianprops_test) + fig_ref.subplots().boxplot(data, medianprops=medianprops_ref) + + @image_comparison(['bxp_withnotch.png'], remove_text=True, savefig_kwarg={'dpi': 40},