Colormatrix от colorvector - PullRequest
       2

Colormatrix от colorvector

3 голосов
/ 02 сентября 2011

У меня есть график scatter3, в котором я использую вектор C, чтобы определить цвета различных точек.Здесь цвет карты цветов линейно отображается на числа в C. Я хочу как-то найти значения RGB каждого значения внутри моего вектора C.Так что я хочу топор на 3 матрицы из моего вектора C.Кто-нибудь знает, возможно ли это?

С наилучшими пожеланиями, Ахим

Редактировать: Благодаря @Aabaz я смог решить эту проблему.Вот мое решение:

colors_current = colormap;
color = [color zeros(length(color),2)];
stepw = floor(length(color)/length(colors_current));
colorsort = sortrows(color);
color_old = 0;
counter = 1;

for i = stepw:stepw:length(JAbs)
    color_indices = find(color_old < color(:,1) & color(:,1) < color_sort(i));
    if counter >= length(colors_current) 
        break;
    end
    for j=1:length(color_indices)
        JAbs(color_indices(j),:) = colors_current(counter,:);
    end
    color_old = colorsort(i);
    counter = counter + 1;
end

Не самый элегантный способ, но, кажется, работает.

1 Ответ

2 голосов
/ 02 сентября 2011

Функция colormap , используемая без аргументов, возвращает текущую карту цветов осей в виде матрицы m на 3, в которой хранятся коды RGB для каждого цвета.Оттуда вы можете получить код RGB для каждого элемента в вашем векторе C.

ОБНОВЛЕНИЕ: Извините, я, должно быть, неправильно прочитал ваш вопрос, потому что не понял, что вы искалиявный способ получить коды rgb, просто связь между картой цветов и кодом rgb.В любом случае, я вижу, вы нашли решение сами, молодец.Сделал небольшую попытку, которую я вам здесь привожу:

n=10;
C=rand(n,1);
map=colormap(jet);
Cregspaced=(min(C):(max(C)-min(C))/(size(map,1)-1):max(C))';
Cmapindex=interp1(Cregspaced,(1:size(map,1))',C,'nearest');
Crgb=map(Cmapindex,:);

Это должно работать, в зависимости от того, как Matlab интерполирует индекс для карты цветов.Вы можете проверить его на собственном решении, чтобы убедиться, что результаты совпадают.

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