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

#matlab #colormap

Вопрос:

Рассмотрим следующий 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];
 

Комментарии:

1. Я полагаю, вы имеете в виду цветовую карту вместо цветовой панели? Как он должен быть определен, например, сколько дискретных цветовых уровней он должен содержать?

2. @Matteo Цветовая карта/цветовая панель определяется в диапазоне [0,1], т. е. если это оттенки серого, где 0-черный, а 1-белый, для первого столбца гистограммы синий и желтый станут темно-серыми (0,1), а оранжевый (середина) станет светло-серым (0,8).

Ответ №1:

Вы можете использовать аргумент ‘CData’ , чтобы задать цвет граней по отдельности. Вам просто нужно не забыть также установить «Цвет лица» как «плоский».

 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]); . Не уверен, какой из них тебе нужен.

Комментарии:

1. Отлично работает для меня как на R2018b, так и на R2019a.