@@ -3700,23 +3700,19 @@ def from_levels_and_colors(levels, colors, extend='neither'):
3700
3700
color_slice = slice_map [extend ]
3701
3701
3702
3702
n_data_colors = len (levels ) - 1
3703
- n_expected = n_data_colors + color_slice .start - (color_slice .stop or 0 )
3703
+ n_extend_colors = color_slice .start - (color_slice .stop or 0 ) # 0, 1 or 2
3704
+ n_expected = n_data_colors + n_extend_colors
3704
3705
if len (colors ) != n_expected :
3705
3706
raise ValueError (
3706
- f'With extend == { extend !r} and { len (levels )} levels, '
3707
- f'expected { n_expected } colors, but got { len (colors )} ' )
3708
-
3709
- cmap = ListedColormap (colors [color_slice ], N = n_data_colors )
3710
-
3711
- if extend in ['min' , 'both' ]:
3712
- cmap .set_under (colors [0 ])
3713
- else :
3714
- cmap .set_under ('none' )
3715
-
3716
- if extend in ['max' , 'both' ]:
3717
- cmap .set_over (colors [- 1 ])
3718
- else :
3719
- cmap .set_over ('none' )
3707
+ f'Expected { n_expected } colors ({ n_data_colors } colors for { len (levels )} '
3708
+ f'levels, and { n_extend_colors } colors for extend == { extend !r} ), '
3709
+ f'but got { len (colors )} ' )
3710
+
3711
+ data_colors = colors [color_slice ]
3712
+ under_color = colors [0 ] if extend in ['min' , 'both' ] else 'none'
3713
+ over_color = colors [- 1 ] if extend in ['max' , 'both' ] else 'none'
3714
+ cmap = ListedColormap (data_colors ).with_extremes (
3715
+ under = under_color , over = over_color )
3720
3716
3721
3717
cmap .colorbar_extend = extend
3722
3718
0 commit comments