Я пытаюсь нанести несколько оценок плотности ядра на один график и хочу, чтобы все они были разных цветов. У меня есть kludged-решение, использующее строку 'rgbcmyk'
и проходящее по ней для каждого отдельного сюжета, но у меня появляются дубликаты после 7 итераций. Есть ли более простой / эффективный способ сделать это и с большим количеством вариантов цвета?
for n=1:10
source(n).data=normrnd(rand()*100,abs(rand()*50),100,1); %generate random data
end
cstring='rgbcmyk'; % color string
figure
hold on
for n=1:length(source)
[f,x]=ksdensity(source(n).data); % calculate the distribution
plot(x,f,cstring(mod(n,7)+1)) % plot with a different color each time
end
matlab
plot
matlab-figure
Doresoom
источник
источник
hold on
является функционально эквивалентны вhold all
. Однако остается вопрос, как получить больше 7 цветов по умолчанию. Цветовая карта по умолчанию может быть решением, описанным Азимом, или может использоваться функция для генерации цветов, настроенных для легкого визуального различения, как показано ниже .hold all
я получаю графики разных цветов (хотя я должен сказать, что они выглядят довольно скучно), тогда как когда я используюhold on
, все мои графики становятся синими. Поэтому мне интересно, что такое функциональная эквивалентность.hold on
выдает разные цвета. Вы используете и более старую версию. В текущих документах "hold all
совпадает сhold on
. Примечание. Этот синтаксис будет удален в следующем выпуске. Используйтеhold on
вместо него". См. Также примечания к выпуску .Ответы:
Вы можете использовать цветовую карту, такую как HSV, для создания набора цветов. Например:
MATLAB имеет 13 различных именованных цветовых карт ( «doc colormap» перечисляет их все).
Другой вариант построения линий разным цветом - использование свойства LineStyleOrder ; см. Определение цвета линий для построения в документации MATLAB для получения дополнительной информации.
источник
hold all
решения @Mark Elliot из-за его универсальности, позволяющей выбирать разные цветовые карты.На самом деле, неплохой быстрый способ заставить цвета циклиться - использовать
hold all;
вместоhold on;
. Каждый последующийplot
будет вращаться (автоматически для вас) через цветовую карту MATLAB по умолчанию.С сайта MATLAB на
hold
:источник
Поздний ответ, но нужно добавить две вещи:
'ColorOrder'
свойство и как установить глобальное значение по умолчанию'DefaultAxesColorOrder'
, см. «Приложение» в конце этого сообщения.ColorOrder
axes
Свойство позволяет MATLAB для автоматического цикла через список цветов при использованииhold on/all
(опять же , см приложение ниже, какset
/ для оси конкретной или глобально через ). Однако по умолчанию MATLAB указывает только короткий список цветов ( всего 7 по состоянию на R2013b) для циклического прохождения, а с другой стороны, может быть проблематично найти хороший набор цветов для большего количества серий данных. Очевидно, что для 10 участков нельзя полагаться на значение по умолчанию .get
ColorOrder
DefaultAxesColorOrder
ColorOrder
Отличный способ определить N визуально отличных цветов - это представление «Сгенерировать максимально воспринимаемые цвета» (GMPDC) на центральном файловом обмене файлов MATLAB . Лучше всего это описать собственными словами автора:
Например, когда запрашивается 25 цветов:
Представление GMPDC было выбрано в официальном блоге MathWorks как Выбор недели в 2010 году отчасти из-за возможности запрашивать произвольное количество цветов (в отличие от MATLAB, построенного с 7 цветами по умолчанию). Они даже сделали отличное предложение установить MATLAB
ColorOrder
при запуске на,Конечно, вы можете установить
ColorOrder
для одной оси или просто создать список цветов для использования любым удобным вам способом. Например, чтобы сгенерировать 10 «максимально различимых для восприятия цветов» и использовать их для 10 графиков на одной оси ( но без использованияColorOrder
, что требует цикла ):Процесс упрощен, не требует
for
цикла, благодаряColorOrder
свойству оси :ПРИЛОЖЕНИЕ
Чтобы получить
ColorOrder
массив RGB, используемый для текущей оси,Чтобы получить значение
ColorOrder
по умолчанию для новых осей,Пример установки нового глобального
ColorOrder
с 10 цветами при запуске MATLAB, вstartup.m
:источник
Поздно на вечеринку. Я сам изучал это и только что нашел об этой опции осей под названием ColorOrder, вы можете указать порядок цвета для сеанса или только для фигуры, а затем просто построить массив и позволить MATLAB автоматически циклически перебирать указанные цвета.
см. Изменение ColorOrder по умолчанию
пример
источник
set(gca,'ColorOrder',jet(5));
Если все векторы имеют одинаковый размер, создайте матрицу и постройте ее. Каждый столбец автоматически отображается с другим цветом. Затем вы можете использовать
legend
для обозначения столбцов:Или, если у вас есть ячейка с именами ядер, используйте
источник