@@ -877,9 +877,7 @@ def get_bad(self):
877877
878878 def set_bad (self , color = 'k' , alpha = None ):
879879 """Set the color for masked values."""
880- self ._rgba_bad = to_rgba (color , alpha )
881- if self ._isinit :
882- self ._set_extremes ()
880+ self ._set_extremes (bad = (color , alpha ))
883881
884882 def get_under (self ):
885883 """Get the color for low out-of-range values."""
@@ -889,9 +887,7 @@ def get_under(self):
889887
890888 def set_under (self , color = 'k' , alpha = None ):
891889 """Set the color for low out-of-range values."""
892- self ._rgba_under = to_rgba (color , alpha )
893- if self ._isinit :
894- self ._set_extremes ()
890+ self ._set_extremes (under = (color , alpha ))
895891
896892 def get_over (self ):
897893 """Get the color for high out-of-range values."""
@@ -901,21 +897,14 @@ def get_over(self):
901897
902898 def set_over (self , color = 'k' , alpha = None ):
903899 """Set the color for high out-of-range values."""
904- self ._rgba_over = to_rgba (color , alpha )
905- if self ._isinit :
906- self ._set_extremes ()
900+ self ._set_extremes (over = (color , alpha ))
907901
908902 def set_extremes (self , * , bad = None , under = None , over = None ):
909903 """
910904 Set the colors for masked (*bad*) values and, when ``norm.clip =
911905 False``, low (*under*) and high (*over*) out-of-range values.
912906 """
913- if bad is not None :
914- self .set_bad (bad )
915- if under is not None :
916- self .set_under (under )
917- if over is not None :
918- self .set_over (over )
907+ self ._set_extremes (bad = bad , under = under , over = over )
919908
920909 def with_extremes (self , * , bad = None , under = None , over = None ):
921910 """
@@ -924,19 +913,33 @@ def with_extremes(self, *, bad=None, under=None, over=None):
924913 out-of-range values, have been set accordingly.
925914 """
926915 new_cm = self .copy ()
927- new_cm .set_extremes (bad = bad , under = under , over = over )
916+ new_cm ._set_extremes (bad = bad , under = under , over = over )
928917 return new_cm
929918
930- def _set_extremes (self ):
931- if self ._rgba_under :
932- self ._lut [self ._i_under ] = self ._rgba_under
933- else :
934- self ._lut [self ._i_under ] = self ._lut [0 ]
935- if self ._rgba_over :
936- self ._lut [self ._i_over ] = self ._rgba_over
937- else :
938- self ._lut [self ._i_over ] = self ._lut [self .N - 1 ]
939- self ._lut [self ._i_bad ] = self ._rgba_bad
919+ def _set_extremes (self , bad = None , under = None , over = None ):
920+ """
921+ Set the colors for masked (*bad*) and out-of-range (*under* and *over) values.
922+
923+ Parameters that are None are left unchanged.
924+ """
925+ if bad is not None :
926+ self ._rgba_bad = to_rgba (bad )
927+ if under is not None :
928+ self ._rgba_under = to_rgba (under )
929+ if over is not None :
930+ self ._rgba_over = to_rgba (over )
931+
932+ # ensure that an existing _lut is updated
933+ if self ._isinit :
934+ if self ._rgba_under :
935+ self ._lut [self ._i_under ] = self ._rgba_under
936+ else :
937+ self ._lut [self ._i_under ] = self ._lut [0 ]
938+ if self ._rgba_over :
939+ self ._lut [self ._i_over ] = self ._rgba_over
940+ else :
941+ self ._lut [self ._i_over ] = self ._lut [self .N - 1 ]
942+ self ._lut [self ._i_bad ] = self ._rgba_bad
940943
941944 def with_alpha (self , alpha ):
942945 """
@@ -1154,7 +1157,7 @@ def _init(self):
11541157 self ._lut [:- 3 , 3 ] = _create_lookup_table (
11551158 self .N , self ._segmentdata ['alpha' ], 1 )
11561159 self ._isinit = True
1157- self ._set_extremes ()
1160+ self ._update_extremes ()
11581161
11591162 def set_gamma (self , gamma ):
11601163 """Set a new gamma value and regenerate colormap."""
@@ -1346,7 +1349,7 @@ def _init(self):
13461349 self ._lut = np .zeros ((self .N + 3 , 4 ), float )
13471350 self ._lut [:- 3 ] = to_rgba_array (self .colors )
13481351 self ._isinit = True
1349- self ._set_extremes ()
1352+ self ._update_extremes ()
13501353
13511354 @property
13521355 def monochrome (self ):
0 commit comments