Из документации matplotlib по scatter 1 :
cmap используется только если c является массивом с плавающей точкой
Таким образом, список цветов должен быть списком с плавающей точкой, а не списком кортежей, как у вас есть сейчас.
plt.colorbar () хочет отображаемый объект, например, CircleCollection, который возвращает plt.scatter ().
Затем vmin и vmax могут контролировать пределы вашей цветовой шкалы. Вещи за пределами vmin / vmax получают цвета конечных точек.
Как это работает для вас?
import matplotlib.pyplot as plt
cm = plt.cm.get_cmap('RdYlBu')
xy = range(20)
z = xy
sc = plt.scatter(xy, xy, c=z, vmin=0, vmax=20, s=35, cmap=cm)
plt.colorbar(sc)
plt.show()