#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.