Цветовая панель matlab для линейного графика, окрашенная по значению

У меня есть 2-х строчный график в Matlab, где каждая линия окрашена в соответствии со значением. Я хотел бы добавить цветовую шкалу, показывающую цвет, соответствующий этим значениям.

У меня есть решение для построения линий в соответствии с желаемым значением, однако я не могу понять, как правильно получить цветовую панель. Я искал это, но застрял.

  1. Задайте цветовую матрицу RGB COL. (N x 3 матрицы от красного к темному, соответствующие равноотстоящим значениям 0: 1).
  2. Отсортируйте данные по их значению z.
  3. Интерполируйте матрицу COL, чтобы получить значения для всех значений z, получив матрицу TRUECOL для строк.
  4. Установите порядок цветов по оси на матрицу TRUECOL и постройте данные.

минималистичный пример:

% Generate 10 lines of 10 points
x = normrnd(0,1,10,10);
% The corresponding values are 
% Note that these do not have to linearly spaced in real code
z = [0,0.05,0.1,0.11,0.12,0.2,0.4,0.45,0.8,0.9];
% Define colormatrix
COL = [0.996078431372549 0.878431372549020 0.823529411764706;...
   0.937254901960784 0.231372549019608 0.172549019607843;...
   0.403921568627451 0 0.0509803921568627];
% Interpolate the COL matrix to get colors for the data
TRUECOL = interp1(linspace(0,1,3),COL,z,'pchip');
% Set the axis coloring qnd plot the data
set(gcf,'DefaultAxesColorOrder',TRUECOL);
plot(x);
colormap(TRUECOL);
colorbar

Затем я меняю цветовую карту и рисую колобар, однако цвета на палитре не соответствуют значениям z. Есть ли способ сказать Matlab, какой цвет соответствует какому значению? Глядя на редактор цветовой шкалы, я вижу, что CData должно иметь к этому какое-то отношение, но я не могу найти способ указать, что CData должно быть z.


person MrOperator    schedule 14.05.2014    source источник
comment
Можете ли вы завершить свой пример, добавив изменение цветовой карты и построение цветовой шкалы?   -  person Trilarion    schedule 14.05.2014
comment
Цвета палитры и цвета линий примерно одинаковы. Что вы имеете в виду под словом "не соответствовать"?   -  person Trilarion    schedule 14.05.2014
comment
Я изменил значения z, чтобы было понятнее. Диапазон значений шкалы палитры от 1 до 11 (это можно изменить с помощью свойства CLim). если вы откроете редактор колобаров, вы увидите, что цвета на палитре линейно отображаются с шагом 0,1. Я хотел бы, чтобы шкала цветов отображала фактические значения z, соответствующие цветам в матрице TRUECOL. Таким образом результат в интерполяции.   -  person MrOperator    schedule 14.05.2014
comment
Еще один пункт в гигантском Списке простых вещей, которые MATLAB не может делать автоматически: - /   -  person Flyto    schedule 14.04.2015


Ответы (1)


Насколько я понимаю, вы хотите, чтобы метки на шкале палитры менялись от 0 до 1, а не от 0 до 11. Чтобы исправить это, используйте эту команду caxis. Чтобы получить более тонкие градации цветов на палитре цветов, вам необходимо более точно интерполировать палитру. Попробуй это:

colormap(interp1(linspace(0,1,size(COL,1)), COL, linspace(0,1,100)));
caxis([0,1]);
colorbar

введите описание изображения здесь

person nibot    schedule 14.05.2014