Поздний ответ, но нужно добавить две вещи:
- Информацию о том, как изменить свойство
'ColorOrder'
и как установить глобальное значение по умолчанию с помощью 'DefaultAxesColorOrder'
, см. В «Приложении» внизу этого сообщения.
- В MATLAB Central File Exchange есть отличный инструмент для генерации любого количества визуально отличных цветов, если у вас есть набор инструментов обработки изображений для его использования. Продолжайте читать для деталей.
Свойство ColorOrder
axes
позволяет MATLAB автоматически циклически проходить по списку цветов при использовании hold on/all
(снова см. Приложение ниже, чтобы узнать, как set
/ get
the ColorOrder
для конкретной оси или глобально через DefaultAxesColorOrder
). Однако по умолчанию MATLAB задает только короткий список цветов ( всего 7 по состоянию на R2013b) для циклического перехода, а с другой стороны, может быть проблематично найти хороший набор цвета для большего количества рядов данных. Для 10 участков вы явно не можете полагаться на значение по умолчанию ColorOrder
.
Отличный способ определить N визуально отличных цветов с помощью «Генерировать максимально различимые для восприятия цвета» (GMPDC) на MATLAB Central File File Exchange . Лучше всего описать его собственными словами:
Эта функция генерирует набор цветов, которые можно различить по отношению к «Лабораторному» цветовому пространству , которое более точно соответствует восприятию цветов человеком, чем RGB. Учитывая исходный большой список возможных цветов, он итеративно выбирает запись в списке, которая наиболее удалена (в пространстве Lab) от всех ранее выбранных записей.
Например, когда запрашивается 25 цветов:
Представление GMPDC было выбрано в официальном блоге MathWorks как Пик недели в 2010 году частично из-за возможности запрашивать произвольное количество цветов (в отличие от встроенных в MATLAB 7 цветов по умолчанию) , Они даже сделали отличное предложение установить ColorOrder
для MATLAB при запуске на
distinguishable_colors(20)
Конечно, вы можете установить ColorOrder
для одной оси или просто сгенерировать список цветов для использования любым удобным вам способом. Например, чтобы сгенерировать 10 «максимально различимых по восприятию цветов» и использовать их для 10 графиков на одной оси (, но не с использованием ColorOrder
, поэтому требуется цикл ):
% Starting with X of size N-by-P-by-2, where P is number of plots
mpdc10 = distinguishable_colors(10) % 10x3 color list
hold on
for ii=1:size(X,2),
plot(X(:,ii,1),X(:,ii,2),'.','Color',mpdc10(ii,:));
end
Процесс упрощен, не требует цикла for
, со свойством ColorOrder
axis :
% X of size N-by-P-by-2
mpdc10 = distinguishable_colors(10)
ha = axes; hold(ha,'on')
set(ha,'ColorOrder',mpdc10) % --- <b>set ColorOrder HERE</b> ---
plot(X(:,:,1),X(:,:,2),'-.') % <b>loop NOT needed, 'Color' NOT needed. Yay!</b>
ПРИЛОЖЕНИЕ
Чтобы получить массив ColorOrder
RGB, используемый для текущей оси,
get(gca,'ColorOrder')
Чтобы получить значение по умолчанию ColorOrder
для новых осей,
get(0,'DefaultAxesColorOrder')
Пример установки нового глобального ColorOrder
с 10 цветами при запуске MATLAB, в startup.m
:
set(0,'DefaultAxesColorOrder',distinguishable_colors(10))