Если я правильно понял вопрос, данные представлены в виде целочисленного numpy массива, который приводит к изображению с ровно N разных цветов.
Чтобы получить цветовую карту с ровно N цветов из цветовой карты viridis , используйте plt.cm.get_cmap('viridis', N)
. В результате получится цветная полоса с ровно N областями.
Чтобы красиво поставить галочки в центре каждой области, разделите пространство на 2N + 1 кусочки, а затем займите все нечетные позиции. (Таким образом, если есть 5 цветов, цветовая полоса будет go от 0 до 4, что даст 11 отметок, из которых отметка 0 пропускается и используются отметки 1, 3, 5, 7 и 9). Рядом с каждым галочкой может быть размещена метка с номером.
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(6, 4))
# create some random test data
data = np.random.normal(0, 0.05, size=(150, 150)).cumsum(axis=0).cumsum(axis=1)
data = data.astype(np.int) # convert to integers
data -= data.min() # let the numbers start at zero
num_colors = data.max() + 1
cmap = plt.cm.get_cmap('viridis', num_colors)
plt.imshow(data, cmap=cmap)
cbar = plt.colorbar(ticks=np.linspace(0, num_colors - 1, num_colors * 2 + 1)[1::2])
cbar.ax.set_yticklabels(range(num_colors))
plt.show()