Использование цветовой полосы для добавления цветов к гистограмме по заданным значениям MATLAB

Рассмотрим следующий bar график

figure
bar([2 4 8; 1 2 3; 3 3 3],'stacked')

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

Я хотел бы, чтобы каждая полоса имела цвет, который будет соответствовать цветовой карте (здесь, между [0,1]), чтобы каждая полоса получала цвет, соответствующий следующим данным.

data = [0.1 0.8 0.1; 0.5 0.5 0.2; 0.6 0.3 0.9];

person jarhead    schedule 13.04.2021    source источник
comment
Я думаю, вы имеете в виду цветовую карту вместо цветовой полосы? Как его определить, сколько дискретных цветовых уровней он должен содержать?   -  person Matteo V    schedule 13.04.2021
comment
@Matteo Цветовая карта / цветовая полоса определяется между [0,1], то есть, если это оттенки серого, где 0 — черный, а 1 — белый, для первого столбца гистограммы синий и желтый станут темно-серыми (0,1). ), а оранжевый (в центре) станет светло-серым (0,8)   -  person jarhead    schedule 13.04.2021


Ответы (1)


Вы можете использовать аргумент 'CData' для индивидуальной установки цвета граней. Вам просто нужно не забыть установить «FaceColor» как «плоский».

b = bar([2 4 8; 1 2 3; 3 3 3], 'stacked');
data = [0.1 0.8 0.1; 0.5 0.5 0.2; 0.6 0.3 0.9];

for i = 1:length(b)
    b(i).CData = repmat(data(i, :)', [1, 3]); % use your data as grayscale color level
    b(i).FaceColor = 'flat';
end

РЕДАКТИРОВАТЬ: В случае, если я ошибся порядком, в котором вам нужны цвета в вашей цветовой палитре, вам следует вместо этого изменить вызов Cdata на b(i).Cdata = repmat(data(:, i), [1, 3]);. Не уверен, какой из них вы хотели.

person Matteo V    schedule 13.04.2021
comment
твой код не работает.. - person jarhead; 13.04.2021
comment
У меня отлично работает как на R2018b, так и на R2019a. - person Matteo V; 13.04.2021