Я думаю, что все, что вам не хватает, это вызов caxis
, чтобы указать минимальные и максимальные значения для сопоставления цветового диапазона:
caxis([18 23]);
Обратите внимание, что следующая строка ...
cb.Limits = [18 23];
... изменяет только пределы тика отображается на цветовой панели, но не меняет ничего о том, как данные отображаются в цветовом диапазоне.Функция caxis
- это то, как вы управляете этим (в приведенном выше случае сопоставление значения 18 с одним концом и значения 23 с другим).По умолчанию ваш код отображал минимальное и максимальное значения в Z
на цветовой диапазон (20,5 и 23 соответственно).Затем, когда вы устанавливаете лимиты тиков на цветовой шкале на больший диапазон, он просто заполняет его последним цветом на цветовой карте, в данном случае красным.Вот почему вы видите столько всего этого.
Бонус
Просто потому, что вас это может заинтересовать, вы также можете использовать интерполяцию с помощью функции interp1
, чтобы легко сгенерироватьЦветная карта выглядит так:
cmap = interp1([1 0 0; 1 1 0; 0 1 0], linspace(1, 3, 41));