В этом случае имеет смысл использовать BoundaryNorm
и ListedColormap
. Определите границы N+1
для цветов N
цветовой карты и используйте spacing="proportional"
в вызове цветовой панели.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import BoundaryNorm, ListedColormap
cmap = ListedColormap(["black", "darkred", "crimson", "salmon", "navy", "violet", "yellow"])
bounds = [0,1,2,3,4,10,20,30]
norm = BoundaryNorm(bounds, cmap.N)
fig, ax = plt.subplots()
sc = ax.scatter(*np.random.rand(2,100), c=np.random.rand(100)*30, cmap=cmap, norm=norm)
fig.colorbar(sc, orientation="horizontal", spacing="proportional")
plt.show()
![enter image description here](https://i.stack.imgur.com/23Nln.png)