@@ -689,6 +689,87 @@ def test_removed_axis():
689689 fig .canvas .draw ()
690690
691691
692+ def test_figure_clear ():
693+ # we test the following figure clearing scenarios:
694+ fig = plt .figure ()
695+
696+ # a) an empty figure
697+ fig .clear ()
698+ assert fig .axes == []
699+
700+ # b) a figure with a single unnested axes
701+ ax = fig .add_subplot (111 )
702+ fig .clear ()
703+ assert fig .axes == []
704+
705+ # c) a figure multiple unnested axes
706+ axes = [fig .add_subplot (2 , 1 , i + 1 ) for i in range (2 )]
707+ fig .clear ()
708+ assert fig .axes == []
709+
710+ # d) a figure with a subfigure
711+ gs = fig .add_gridspec (ncols = 2 , nrows = 1 )
712+ subfig = fig .add_subfigure (gs [0 ])
713+ subaxes = subfig .add_subplot (111 )
714+ fig .clear ()
715+ assert subfig not in fig .subfigs
716+ assert fig .axes == []
717+
718+ # e) a figure with a subfigure and a subplot
719+ subfig = fig .add_subfigure (gs [0 ])
720+ subaxes = subfig .add_subplot (111 )
721+ mainaxes = fig .add_subplot (gs [1 ])
722+
723+ # e.1) removing just the axes leaves the subplot
724+ mainaxes .remove ()
725+ assert fig .axes == [subaxes ]
726+
727+ # e.2) removing just the subaxes leaves the subplot
728+ # and subfigure
729+ mainaxes = fig .add_subplot (gs [1 ])
730+ subaxes .remove ()
731+ assert fig .axes == [mainaxes ]
732+ assert subfig in fig .subfigs
733+
734+ # e.3) clearing the subfigure leaves the subplot
735+ subaxes = subfig .add_subplot (111 )
736+ assert mainaxes in fig .axes
737+ assert subaxes in fig .axes
738+ subfig .clear ()
739+ assert subfig in fig .subfigs
740+ assert subaxes not in subfig .axes
741+ assert subaxes not in fig .axes
742+ assert mainaxes in fig .axes
743+
744+ # e.4) clearing the whole thing
745+ subaxes = subfig .add_subplot (111 )
746+ fig .clear ()
747+ assert fig .axes == []
748+ assert fig .subfigs == []
749+
750+ # f) multiple subfigures
751+ subfigs = [fig .add_subfigure (gs [i ]) for i in [0 , 1 ]]
752+ subaxes = [sfig .add_subplot (111 ) for sfig in subfigs ]
753+ assert all (ax in fig .axes for ax in subaxes )
754+ assert all (sfig in fig .subfigs for sfig in subfigs )
755+
756+ # f.1) clearing only one subfigure
757+ subfigs [0 ].clear ()
758+ assert subaxes [0 ] not in fig .axes
759+ assert subaxes [1 ] in fig .axes
760+ assert subfigs [1 ] in fig .subfigs
761+
762+ # f.2) clearing the whole thing
763+ subfigs [1 ].clear ()
764+ subfigs = [fig .add_subfigure (gs [i ]) for i in [0 , 1 ]]
765+ subaxes = [sfig .add_subplot (111 ) for sfig in subfigs ]
766+ assert all (ax in fig .axes for ax in subaxes )
767+ assert all (sfig in fig .subfigs for sfig in subfigs )
768+ fig .clear ()
769+ assert fig .subfigs == []
770+ assert fig .axes == []
771+
772+
692773@mpl .style .context ('mpl20' )
693774def test_picking_does_not_stale ():
694775 fig , ax = plt .subplots ()
0 commit comments