diff --git a/lib/matplotlib/patches.py b/lib/matplotlib/patches.py index 5caa3c7af009..bd89ae64aba3 100644 --- a/lib/matplotlib/patches.py +++ b/lib/matplotlib/patches.py @@ -996,6 +996,8 @@ class StepPatch(PathPatch): The path is unclosed. It starts and stops at baseline. """ + _edge_default = False + @docstring.dedent_interpd def __init__(self, values, edges, *, orientation='vertical', baseline=0, **kwargs): diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index e3ae4d2427c9..0c962de1a1a1 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -1806,14 +1806,13 @@ def test_hist_zorder(histtype, zorder): assert patch.get_zorder() == zorder -@check_figures_equal() +@check_figures_equal(extensions=['png']) def test_stairs(fig_test, fig_ref): import matplotlib.lines as mlines y = np.array([6, 14, 32, 37, 48, 32, 21, 4]) # hist x = np.array([1., 2., 3., 4., 5., 6., 7., 8., 9.]) # bins - fig_test, test_axes = plt.subplots(3, 2) - test_axes = test_axes.flatten() + test_axes = fig_test.subplots(3, 2).flatten() test_axes[0].stairs(y, x, baseline=None) test_axes[1].stairs(y, x, baseline=None, orientation='horizontal') test_axes[2].stairs(y, x) @@ -1821,67 +1820,70 @@ def test_stairs(fig_test, fig_ref): test_axes[4].stairs(y, x) test_axes[4].semilogy() test_axes[5].stairs(y, x, orientation='horizontal') - test_axes[5].semilogy() + test_axes[5].semilogx() - fig_ref, ref_axes = plt.subplots(3, 2) - ref_axes = ref_axes.flatten() - ref_axes[0].plot(x, np.append(y, y[-1]), drawstyle='steps-post') - ref_axes[1].plot(np.append(y[0], y), x, drawstyle='steps-post') + # defaults of `PathPatch` to be used for all following Line2D + style = {'solid_joinstyle': 'miter', 'solid_capstyle': 'butt'} - ref_axes[2].plot(x, np.append(y, y[-1]), drawstyle='steps-post') - ref_axes[2].add_line(mlines.Line2D([x[0], x[0]], [0, y[0]])) - ref_axes[2].add_line(mlines.Line2D([x[-1], x[-1]], [0, y[-1]])) + ref_axes = fig_ref.subplots(3, 2).flatten() + ref_axes[0].plot(x, np.append(y, y[-1]), drawstyle='steps-post', **style) + ref_axes[1].plot(np.append(y[0], y), x, drawstyle='steps-post', **style) + + ref_axes[2].plot(x, np.append(y, y[-1]), drawstyle='steps-post', **style) + ref_axes[2].add_line(mlines.Line2D([x[0], x[0]], [0, y[0]], **style)) + ref_axes[2].add_line(mlines.Line2D([x[-1], x[-1]], [0, y[-1]], **style)) ref_axes[2].set_ylim(0, None) - ref_axes[3].plot(np.append(y[0], y), x, drawstyle='steps-post') - ref_axes[3].add_line(mlines.Line2D([0, y[0]], [x[0], x[0]])) - ref_axes[3].add_line(mlines.Line2D([0, y[-1]], [x[-1], x[-1]])) + ref_axes[3].plot(np.append(y[0], y), x, drawstyle='steps-post', **style) + ref_axes[3].add_line(mlines.Line2D([0, y[0]], [x[0], x[0]], **style)) + ref_axes[3].add_line(mlines.Line2D([0, y[-1]], [x[-1], x[-1]], **style)) ref_axes[3].set_xlim(0, None) - ref_axes[4].plot(x, np.append(y, y[-1]), drawstyle='steps-post') - ref_axes[4].add_line(mlines.Line2D([x[0], x[0]], [0, y[0]])) - ref_axes[4].add_line(mlines.Line2D([x[-1], x[-1]], [0, y[-1]])) + ref_axes[4].plot(x, np.append(y, y[-1]), drawstyle='steps-post', **style) + ref_axes[4].add_line(mlines.Line2D([x[0], x[0]], [0, y[0]], **style)) + ref_axes[4].add_line(mlines.Line2D([x[-1], x[-1]], [0, y[-1]], **style)) ref_axes[4].semilogy() - ref_axes[5].plot(np.append(y[0], y), x, drawstyle='steps-post') - ref_axes[5].add_line(mlines.Line2D([0, y[0]], [x[0], x[0]])) - ref_axes[5].add_line(mlines.Line2D([0, y[-1]], [x[-1], x[-1]])) + ref_axes[5].plot(np.append(y[0], y), x, drawstyle='steps-post', **style) + ref_axes[5].add_line(mlines.Line2D([0, y[0]], [x[0], x[0]], **style)) + ref_axes[5].add_line(mlines.Line2D([0, y[-1]], [x[-1], x[-1]], **style)) ref_axes[5].semilogx() -@check_figures_equal() +@check_figures_equal(extensions=['png']) def test_stairs_fill(fig_test, fig_ref): h, bins = [1, 2, 3, 4, 2], [0, 1, 2, 3, 4, 5] bs = -2 # Test - fig_test, test_axes = plt.subplots(2, 2) - test_axes = test_axes.flatten() + test_axes = fig_test.subplots(2, 2).flatten() test_axes[0].stairs(h, bins, fill=True) test_axes[1].stairs(h, bins, orientation='horizontal', fill=True) test_axes[2].stairs(h, bins, baseline=bs, fill=True) test_axes[3].stairs(h, bins, baseline=bs, orientation='horizontal', - fill=True) + fill=True) # # Ref - fig_ref, ref_axes = plt.subplots(2, 2) - ref_axes = ref_axes.flatten() - ref_axes[0].fill_between(bins, np.append(h, h[-1]), step='post') + ref_axes = fig_ref.subplots(2, 2).flatten() + ref_axes[0].fill_between(bins, np.append(h, h[-1]), step='post', lw=0) ref_axes[0].set_ylim(0, None) - ref_axes[1].fill_betweenx(bins, np.append(h, h[-1]), step='post') + ref_axes[1].fill_betweenx(bins, np.append(h, h[-1]), step='post', lw=0) ref_axes[1].set_xlim(0, None) ref_axes[2].fill_between(bins, np.append(h, h[-1]), - np.ones(len(h)+1)*bs, step='post') + np.ones(len(h)+1)*bs, step='post', lw=0) ref_axes[2].set_ylim(bs, None) ref_axes[3].fill_betweenx(bins, np.append(h, h[-1]), - np.ones(len(h)+1)*bs, step='post') + np.ones(len(h)+1)*bs, step='post', lw=0) ref_axes[3].set_xlim(bs, None) -@check_figures_equal() +@check_figures_equal(extensions=['png']) def test_stairs_update(fig_test, fig_ref): + # fixed ylim because stairs() does autoscale, but updating data does not + ylim = -3, 4 # Test - fig_test, test_ax = plt.subplots() + test_ax = fig_test.add_subplot() h = test_ax.stairs([1, 2, 3]) + test_ax.set_ylim(ylim) h.set_values([3, 2, 1]) h.set_edges(np.arange(4)+2) h.set_data([1, 2, 1], np.arange(4)/2) @@ -1892,31 +1894,32 @@ def test_stairs_update(fig_test, fig_ref): h.set_baseline(-2) assert h.get_baseline() == -2 - # # Ref - fig_ref, ref_ax = plt.subplots() + # Ref + ref_ax = fig_ref.add_subplot() h = ref_ax.stairs([1, 2, 3], baseline=-2) + ref_ax.set_ylim(ylim) -@pytest.mark.xfail def test_stairs_invalid_nan(): - plt.stairs([1, 2], [0, np.nan, 1]) + with pytest.raises(ValueError, match='Nan values in "edges"'): + plt.stairs([1, 2], [0, np.nan, 1]) -@pytest.mark.xfail def test_stairs_invalid_mismatch(): - plt.stairs([1, 2], [0, 1]) + with pytest.raises(ValueError, match='Size mismatch'): + plt.stairs([1, 2], [0, 1]) -@pytest.mark.xfail def test_stairs_invalid_update(): h = plt.stairs([1, 2], [0, 1, 2]) - h.set_edges([1, np.nan, 2]) + with pytest.raises(ValueError, match='Nan values in "edges"'): + h.set_edges([1, np.nan, 2]) -@pytest.mark.xfail def test_stairs_invalid_update2(): h = plt.stairs([1, 2], [0, 1, 2]) - h.set_edges(np.arange(5)) + with pytest.raises(ValueError, match='Size mismatch'): + h.set_edges(np.arange(5)) @image_comparison(['test_stairs_options.png'], remove_text=True) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy