2016-03-06 4 views
0

Я думаю, что это не новый вопрос, но я не нашел конкретного решения или решение, которое я нашел до сих пор, не решает мою проблему. Я пытаюсь построить контур (не контур) определенного уровня некоторых 3D-данных в Matlab. Я нашел, что какое-то решение пытается найти объект патча и определить грань оттуда для каждой контурной линии.Как указать цвет контура в matlab

f=peaks(512)*10; 
[C,h] = contour(f, [-60 -30 -20 0 20 30 50 60]); 
colorbar; 
Cld = get(h, 'children'); 
for j=1:length(Cld) 
    if strcmp(get(Cld(j), 'Type'), 'patch') 
    Iso = get(Cld(j), 'CData'); 
    if Iso==-60 
     set(Cld(j), 'facecolor', [1 0 0]); 
    elseif Iso==-30 
     set(Cld(j), 'facecolor', [0 1 0]); 
    elseif Iso==-20 
     set(Cld(j), 'facecolor', [0 0 1]); 
    elseif Iso==0 
     set(Cld(j), 'facecolor', [0.5 0.3 0]); 
    elseif Iso==20 
     set(Cld(j), 'facecolor', [0.9 0 0.3]); 
    elseif Iso==30 
     set(Cld(j), 'facecolor', [0.8 0.7 0.1]); 
    elseif Iso==50 
     set(Cld(j), 'facecolor', [0.25 0.66 0.4]); 
    elseif Iso==60 
     set(Cld(j), 'facecolor', [0.5 0.1 0.3]); 
    end 
    end 
end 

Этот код вычерчивает линию точно не на уровне -60 -30 -20 0 20 30 50 и 60, но что-то близко, как хорошо. Во-вторых, он не использует указанный мной цвет, кажется, что он не содержит никаких патч-объектов из этого дескриптора.

обновление: Я найти способ сделать трюк

hold on; contour(f, [-60 -60], 'linewidth', 2, 'linecolor','m'); 
hold on; contour(f, [-30 -30], 'linewidth', 2, 'linecolor','c'); 
hold on; contour(f, [-20 -20], 'linewidth', 2, 'linecolor','y'); 
hold on; contour(f, [0 0], 'linewidth', 2, 'linecolor','k'); 
hold on; contour(f, [20 20], 'linewidth', 2, 'linecolor','b'); 
hold on; contour(f, [30 30], 'linewidth', 2, 'linecolor','g'); 
hold on; contour(f, [60 60], 'linewidth', 2, 'linecolor','r'); 

цвет линий изменился, показываемый уровень, как и ожидалось. Но цветная панель не изменяется соответственно. Есть идеи?

ответ

1

По умолчанию в графике contour используется текущая цветовая схема фигуры, чтобы определить, какой цвет будут иметь контурные линии. Вместо того, чтобы создавать кучу отдельных объектов contour (которые больше не привязаны к цветовой палитре/цветной панели, как вы уже нашли), проще создать настраиваемый набор цветов, который соответствует желаемым цветам.

Итак, для вашего примера этот цветной код (основанный на ваших данных выше) будет выглядеть примерно так.

cmap = [1 0 1; % magenta 
     0 1 1; % cyan 
     1 1 0; % yellow 
     0 0 0; % black 
     0 0 1; % blue 
     0 1 0; % green 
     1 0 0]; % red 

Так что теперь мы можем создать единый contour сюжет для всех уровней, которые вы хотите отобразить с некоторыми данными псевды только с той разницей, что мы установим цветовую палитру на рисунок, чтобы быть обычаем один определенный выше.

data = rand(10); 
data = (data - 0.5) * 225; 

contourLevels = [-60 -30 -20 0 20 30 60]; 

figure(); 
contour(data, contourLevels, 'LineWidth', 2); 

% Use the custom colormap 
colormap(cmap); 

colorbar() 
set(gca, 'clim', [-60 60]) 

enter image description here

Теперь у вас есть данные окрашена таким образом, что вы хотите, но теперь ваши данные связаны с Colorbar.

 Смежные вопросы

  • Нет связанных вопросов^_^