Изменить цвет элемента панели в гистограмме Matlab? - PullRequest
0 голосов
/ 17 мая 2018

как я могу изменить цвет одного из моих элементов бара на гистограмме? Потому что, похоже, моя версия Matlab (2015b) не позволяет мне использовать b.LineWidth b.EdgeColor или CData. мой код что-то вроде ниже;

b = bar(1:30); 
b.FaceColor = 'flat'; 
[bv,bi] = max(1:30); 
b(bi).LineWidth = 2;
b(bi).EdgeColor = 'red';

С этой ошибкой для использования b.LineWidth и b.EdgeColor;

Нет открытого свойства LineWidth для класса matlab.graphics.GraphicsPlaceholder. Ошибка в tt (строка 5)

и ошибка использования CData;

b = bar(1:30); 
b.FaceColor = 'flat'; 
[bv,bi] = max(1:30);
b.CData(bi) = [0.4,0.4,0.4];

Нет подходящего метода, свойства или поля 'CData' для класса 'matlab.graphics.chart.primitive.Bar'.

1 Ответ

0 голосов
/ 18 мая 2018

(Я только что узнал что-то новое сегодня!)

Кажется, что 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 в этом ответе .]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...