@@ -709,6 +709,87 @@ def test_removed_axis():
709709 fig .canvas .draw ()
710710
711711
712+ def test_figure_clear ():
713+ # we test the following figure clearing scenarios:
714+ fig = plt .figure ()
715+
716+ # a) an empty figure
717+ fig .clear ()
718+ assert fig .axes == []
719+
720+ # b) a figure with a single unnested axes
721+ ax = fig .add_subplot (111 )
722+ fig .clear ()
723+ assert fig .axes == []
724+
725+ # c) a figure multiple unnested axes
726+ axes = [fig .add_subplot (2 , 1 , i + 1 ) for i in range (2 )]
727+ fig .clear ()
728+ assert fig .axes == []
729+
730+ # d) a figure with a subfigure
731+ gs = fig .add_gridspec (ncols = 2 , nrows = 1 )
732+ subfig = fig .add_subfigure (gs [0 ])
733+ subaxes = subfig .add_subplot (111 )
734+ fig .clear ()
735+ assert subfig not in fig .subfigs
736+ assert fig .axes == []
737+
738+ # e) a figure with a subfigure and a subplot
739+ subfig = fig .add_subfigure (gs [0 ])
740+ subaxes = subfig .add_subplot (111 )
741+ mainaxes = fig .add_subplot (gs [1 ])
742+
743+ # e.1) removing just the axes leaves the subplot
744+ mainaxes .remove ()
745+ assert fig .axes == [subaxes ]
746+
747+ # e.2) removing just the subaxes leaves the subplot
748+ # and subfigure
749+ mainaxes = fig .add_subplot (gs [1 ])
750+ subaxes .remove ()
751+ assert fig .axes == [mainaxes ]
752+ assert subfig in fig .subfigs
753+
754+ # e.3) clearing the subfigure leaves the subplot
755+ subaxes = subfig .add_subplot (111 )
756+ assert mainaxes in fig .axes
757+ assert subaxes in fig .axes
758+ subfig .clear ()
759+ assert subfig in fig .subfigs
760+ assert subaxes not in subfig .axes
761+ assert subaxes not in fig .axes
762+ assert mainaxes in fig .axes
763+
764+ # e.4) clearing the whole thing
765+ subaxes = subfig .add_subplot (111 )
766+ fig .clear ()
767+ assert fig .axes == []
768+ assert fig .subfigs == []
769+
770+ # f) multiple subfigures
771+ subfigs = [fig .add_subfigure (gs [i ]) for i in [0 , 1 ]]
772+ subaxes = [sfig .add_subplot (111 ) for sfig in subfigs ]
773+ assert all (ax in fig .axes for ax in subaxes )
774+ assert all (sfig in fig .subfigs for sfig in subfigs )
775+
776+ # f.1) clearing only one subfigure
777+ subfigs [0 ].clear ()
778+ assert subaxes [0 ] not in fig .axes
779+ assert subaxes [1 ] in fig .axes
780+ assert subfigs [1 ] in fig .subfigs
781+
782+ # f.2) clearing the whole thing
783+ subfigs [1 ].clear ()
784+ subfigs = [fig .add_subfigure (gs [i ]) for i in [0 , 1 ]]
785+ subaxes = [sfig .add_subplot (111 ) for sfig in subfigs ]
786+ assert all (ax in fig .axes for ax in subaxes )
787+ assert all (sfig in fig .subfigs for sfig in subfigs )
788+ fig .clear ()
789+ assert fig .subfigs == []
790+ assert fig .axes == []
791+
792+
712793@mpl .style .context ('mpl20' )
713794def test_picking_does_not_stale ():
714795 fig , ax = plt .subplots ()
0 commit comments