@@ -870,10 +870,10 @@ def legend_elements(self, variable_name='x', str_format=str):
870870 lower = str_format (lower )
871871 upper = str_format (upper )
872872
873- if i == 0 and self .extend in ('lower ' , 'both' ):
874- labels .append (r'$%s \leq %s$' % (variable_name , upper , ))
875- elif i == n_levels - 1 and self .extend in ('upper ' , 'both' ):
876- labels .append (r'$%s > %s$' % (variable_name , lower , ))
873+ if i == 0 and self .extend in ('min ' , 'both' ):
874+ labels .append (r'$%s \leq %s$' % (variable_name , lower , ))
875+ elif i == n_levels - 1 and self .extend in ('max ' , 'both' ):
876+ labels .append (r'$%s > %s$' % (variable_name , upper , ))
877877 else :
878878 labels .append (r'$%s < %s \leq %s$' % (lower , variable_name , upper ))
879879 else :
@@ -1029,24 +1029,25 @@ def _contour_level_args(self, z, args):
10291029 raise ValueError ("Filled contours require at least 2 levels." )
10301030
10311031 def _process_levels (self ):
1032+ # Color mapping range (norm vmin, vmax) is based on levels.
1033+ self .vmin = np .amin (self .levels )
1034+ self .vmax = np .amax (self .levels )
1035+ # Make a private _levels to include extended regions.
10321036 self ._levels = list (self .levels )
10331037 if self .extend in ('both' , 'min' ):
10341038 self ._levels .insert (0 , min (self .levels [0 ],self .zmin ) - 1 )
10351039 if self .extend in ('both' , 'max' ):
10361040 self ._levels .append (max (self .levels [- 1 ],self .zmax ) + 1 )
10371041 self ._levels = np .asarray (self ._levels )
1038- self .vmin = np .amin (self .levels ) # alternative would be self.layers
1039- self .vmax = np .amax (self .levels )
1040- if self .extend in ('both' , 'min' ):
1041- self .vmin = 2 * self .levels [0 ] - self .levels [1 ]
1042- if self .extend in ('both' , 'max' ):
1043- self .vmax = 2 * self .levels [- 1 ] - self .levels [- 2 ]
10441042 if self .filled :
1043+ # layer values are mid-way between levels
10451044 self .layers = 0.5 * (self ._levels [:- 1 ] + self ._levels [1 :])
1045+ # ...except that extended layers must be outside the
1046+ # normed range, so use huge values:
10461047 if self .extend in ('both' , 'min' ):
1047- self .layers [0 ] = 0.5 * ( self . vmin + self . _levels [ 1 ])
1048+ self .layers [0 ] = - 1e300
10481049 if self .extend in ('both' , 'max' ):
1049- self .layers [- 1 ] = 0.5 * ( self . vmax + self . _levels [ - 2 ])
1050+ self .layers [- 1 ] = 1e300
10501051 else :
10511052 self .layers = self .levels # contour: a line is a thin layer
10521053 # Use only original levels--no extended levels
@@ -1065,9 +1066,11 @@ def _process_colors(self):
10651066 """
10661067 self .monochrome = self .cmap .monochrome
10671068 if self .colors is not None :
1069+ # Generate integers for direct indexing.
10681070 i0 , i1 = 0 , len (self .levels )
10691071 if self .filled :
10701072 i1 -= 1
1073+ # Out of range indices for over and under:
10711074 if self .extend in ('both' , 'min' ):
10721075 i0 = - 1
10731076 if self .extend in ('both' , 'max' ):
@@ -1080,7 +1083,8 @@ def _process_colors(self):
10801083 self .set_clim (self .vmin , self .vmax )
10811084 if self .extend in ('both' , 'max' , 'min' ):
10821085 self .norm .clip = False
1083- self .set_array (self .layers )
1086+ self .set_array (self .layers ) # Required by colorbar, but not
1087+ # actually used.
10841088 # self.tcolors are set by the "changed" method
10851089
10861090 def _process_linewidths (self ):
0 commit comments