Поздний ответ, но нужно добавить две вещи:
- Для получения информации о том, как изменить свойство
'ColorOrder'
и как установить глобальное значение по умолчанию с помощью 'DefaultAxesColorOrder'
, см. «Приложение» внизу этого сообщения.
- В MATLAB Central File Exchange есть отличный инструмент для генерации любого количества визуально различных цветов, если у вас есть Image Processing Toolbox для его использования. Читайте подробности.
Свойство ColorOrder
axes
позволяет MATLAB автоматически циклически перемещаться по списку цветов при использовании hold on/all
( опять же, см. Приложение ниже, чтобы узнать, как _6 _ / _ 7_ ColorOrder
для определенной оси или глобально через DefaultAxesColorOrder
). Однако по умолчанию MATLAB указывает только короткий список цветов (всего 7 по состоянию на R2013b) для циклического перебора, и, с другой стороны, может быть проблематично найти хороший набор цветов для дополнительных рядов данных. Очевидно, что для 10 графиков нельзя полагаться на значение по умолчанию ColorOrder
.
Отличный способ определить N визуально различных цветов - использовать «Сгенерируйте максимально воспринимаемые цвета» (GMPDC), представленные на центральном файловом обмене файлов MATLAB. Лучше всего это описать собственными словами автора:
Эта функция генерирует набор цветов, которые можно различить по "лабораторному" цветовому пространству, которое более точно соответствует человеческому цвету. восприятие, чем 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 of size N-by-P-by-2
mpdc10 = distinguishable_colors(10)
ha = axes; hold(ha,'on')
set(ha,'ColorOrder',mpdc10) % --- set ColorOrder HERE ---
plot(X(:,:,1),X(:,:,2),'-.') % loop NOT needed, 'Color' NOT needed. Yay!
ПРИЛОЖЕНИЕ
Чтобы получить массив ColorOrder
RGB, используемый для текущей оси,
get(gca,'ColorOrder')
Чтобы получить значение по умолчанию ColorOrder
для новых осей,
get(0,'DefaultAxesColorOrder')
Пример установки нового глобального ColorOrder
с 10 цветами при запуске MATLAB в startup.m
:
set(0,'DefaultAxesColorOrder',distinguishable_colors(10))
person
chappjc
schedule
26.02.2014
hold on
функционально эквивалентенhold all
. Однако остается вопрос, как получить больше 7 цветов по умолчанию. Цветовая карта по умолчанию может быть решением, описанным Азимом, или может использоваться функция для генерации цветов, настроенная для легкого визуального различения, как показано ниже < / а>. - person chappjc   schedule 25.10.2014hold all
, я получаю графики разных цветов (хотя я должен сказать, что они выглядят довольно скучно), тогда как когда я используюhold on
, все мои графики становятся синими. Так что мне интересно, что такое функциональная эквивалентность. - person HelloGoodbye   schedule 16.03.2015hold on
просто предотвращает стирание MATLAB предыдущих графиков при выполнении нового вызоваplot
.hold all
также назначает новые атрибуты для последующих вызовов построения графика. - person Doresoom   schedule 16.03.2015hold on
дает разные цветовые диаграммы. Вы используете и более старую версию. Из текущих документовhold all
совпадает сhold on
. Примечание. Этот синтаксис будет удален в следующем выпуске. Вместо этого используйтеhold on
. См. Также примечания к выпуску. - person chappjc   schedule 16.03.2015graphicsversion('handlegraphics')
вернетtrue
, указывая на то, что MATLAB работает со старой графической системой дескрипторов. - person chappjc   schedule 16.03.2015