(Я только что узнал что-то новое сегодня!)
Кажется, что bar
имеет два основных режима работы , создающих различные типы графических объектов-дескрипторов. Входной аргумент style
выбирает режим работы:
bar(...,'grouped')
или bar(...,'stacked')
создает объект Bar
. Обратите внимание, что grouped
является стилем по умолчанию.
bar(...,'hist')
или bar(...,'histc')
создает объект Patch
.
В документации не указано, что режим hist
создает объект другого типа. В R2015b эти же опции существовали , я предполагаю, что типы вывода были такими же, как и в моей версии MATLAB (R2017a).
Объект Bar
, созданный в первом режиме, не обладает свойством CData
. Существует свойство FaceColor
и EdgeColor
. См. Bar
документацию по свойствам для получения дополнительной информации. Но обратите внимание, что это один объект, поэтому вы не можете индексировать в дескриптор и устанавливать свойства для отдельных баров. Свойства управляют всеми барами одновременно:
b = bar(1:30);
b.FaceColor = 'flat';
b.LineWidth = 2;
b.EdgeColor = 'red';
Исключением являются свойства XData
и YData
, которые имеют одно значение на бар.
Объект Patch
, созданный во втором режиме, обладает свойством CData
. Немного сложнее манипулировать, потому что Patch
имеет координаты для каждой вершины и каждого ребра. Но свойство CData
может быть установлено по-разному в зависимости от ваших потребностей. При установке в массив N
x1 (с N
числом столбцов) он дает индекс в цветовую карту для каждого столбца (но см. Также свойство оси Clim
для интерпретации этого индекса). Если установить массив N
x1x3, он даст триплет RGB для каждого столбца. См. Patch
документацию по свойствам для получения дополнительной информации. Вот пример:
b = bar(1:30,'hist');
b.FaceColor = 'flat';
b.LineWidth = 2;
b.EdgeColor = 'red';
cols = zeros(30,1,3)+0.5;
cols(5,1,:) = [1,0,0];
b.CData = cols;
[Кредит gnovice в этом ответе .]