Лучший способ увидеть, что происходит, - добавить цветную полосу (plt.colorbar()
, после создания графика рассеяния). Вы заметите, что все значения out
между 0 и 10000 находятся ниже самой нижней части шкалы, где все очень светло-зеленое.
Как правило, значения ниже vmin
будут окрашены самый низкий цвет и значения выше vmax
получат самый высокий цвет.
Если вы установите vmax
меньше vmin
, внутренне они будут заменены. Хотя, в зависимости от конкретной версии matplotlib и вызываемых функций, matplotlib может выдавать предупреждение об ошибке. Поэтому лучше всего установить vmin
всегда ниже vmax
.
Если вы не установите vmin
, он будет автоматически рассчитан как минимум данных. Точно так же, если вы не установите vmax
, он будет установлен на максимум данных. Таким образом, если вы установите vmin=99999
и не установите vmax
, vmax
будет вычислено как 10000. Как и теперь vmax < vmin
, matplotlib поменяет их местами, поэтому вы заканчиваете vmin=10000 and
vmax = 99999`, как показано на панели цветов.
Если вы не установите цветовую карту (cmap=
), matplotlib автоматически будет использовать 'viridis' . Эта цветовая карта имеет темно-фиолетовый / синий цвет около vmin
.
Если вы не установите параметр c=
, цвет будет взят из цикла свойств по умолчанию . Итак, в первый раз он называется синим цветом, в следующий раз оранжевым, затем зеленым, затем красным, .... Есть 10 цветов, после чего цвета начинаются снова с синего. (Цветовая карта называется 'tab10' в текущих версиях matplotlib.) Обратите внимание, что vmin
и vmax
игнорируются, если вы не установите c=
.
. В приведенном ниже коде я добавил красная линия, где значения out
принадлежат цветовой шкале. Вы можете поэкспериментировать с различными значениями vmin и vmax, чтобы увидеть, что происходит. Обычно проще всего не заполнять их и позволить matplotlib рассчитать их автоматически.
import matplotlib.pyplot as plt
num = range(1, 100)
out = [x ** 2 for x in num]
plt.figure(figsize=(11, 11))
plt.title('Scatter', size=24)
plt.ylabel('Result', size=24)
plt.xlabel('Number', size=24)
plt.axis([0, 110, 0, 11000])
plt.scatter(num, out, s=50, lw=2, c=out, cmap=plt.cm.Greens, marker='o', label='Scatter', vmin=99999)
# plt.colorbar()
cbar = plt.colorbar()
cbar.ax.vlines(1, min(out), max(out), color='crimson', lw=3, clip_on=False)
plt.show()
На графике ниже изображены три ситуации:
#left plot ('c=' set to 'out', 'cmap=' set to 'Greens')
plt.scatter(num, out, s=50, lw=2, c=out, cmap=plt.cm.Greens, marker='o', vmin=99999)
#central plot ('c=' not set, 'cmap=' not set)
plt.scatter(num, out, s=50, lw=2, marker='o', vmin=99999)
#right plot ('c=' set to 'out', 'cmap=' not set)
plt.scatter(num, out, s=50, lw=2, c=out, marker='o', vmin=99999)
