Поздний ответ, но нужно добавить две вещи:
- Для получения информации о том, как изменить
'ColorOrder'
свойство и как установить глобальное значение по умолчанию 'DefaultAxesColorOrder'
, см. «Приложение» в конце этого сообщения.
- В MATLAB Central File Exchange есть отличный инструмент для генерации любого количества визуально различных цветов, если у вас есть Image Processing Toolbox для его использования. Читайте подробности.
ColorOrder
axes
Свойство позволяет MATLAB для автоматического цикла через список цветов при использовании hold on/all
(опять же , см приложение ниже, как set
/ для оси конкретной или глобально через ). Однако по умолчанию MATLAB указывает только короткий список цветов ( всего 7 по состоянию на R2013b) для циклического прохождения, а с другой стороны, может быть проблематично найти хороший набор цветов для большего количества серий данных. Очевидно, что для 10 участков нельзя полагаться на значение по умолчанию .get
ColorOrder
DefaultAxesColorOrder
ColorOrder
Отличный способ определить N визуально отличных цветов - это представление «Сгенерировать максимально воспринимаемые цвета» (GMPDC) на центральном файловом обмене файлов MATLAB . Лучше всего это описать собственными словами автора:
Эта функция генерирует набор цветов, которые можно различить по цветовому пространству "Lab" , которое более точно соответствует восприятию цвета человеком, чем RGB. Учитывая исходный большой список возможных цветов, он итеративно выбирает запись в списке, которая является самой дальней (в пространстве Lab) от всех ранее выбранных записей.
Например, когда запрашивается 25 цветов:
Представление GMPDC было выбрано в официальном блоге MathWorks как Выбор недели в 2010 году отчасти из-за возможности запрашивать произвольное количество цветов (в отличие от MATLAB, построенного с 7 цветами по умолчанию). Они даже сделали отличное предложение установить MATLAB ColorOrder
при запуске на,
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
свойству оси :
% X размера N-by-P-by-2
mpdc10 = различимые_цвета (10)
ha = оси; держать (ха, 'на')
set (ha, 'ColorOrder', mpdc10)% --- установите ColorOrder ЗДЕСЬ ---
plot (X (:,:, 1), X (:,:, 2), '-.')% loop НЕ нужен, 'Color' НЕ нужен. Ура!
ПРИЛОЖЕНИЕ
Чтобы получить ColorOrder
массив RGB, используемый для текущей оси,
get(gca,'ColorOrder')
Чтобы получить значение ColorOrder
по умолчанию для новых осей,
get(0,'DefaultAxesColorOrder')
Пример установки нового глобального ColorOrder
с 10 цветами при запуске MATLAB, в startup.m
:
set(0,'DefaultAxesColorOrder',distinguishable_colors(10))