Я думаю, что это не новый вопрос, но я не нашел конкретного решения или решение, которое я нашел до сих пор, не решает мою проблему. Я пытаюсь построить контур (не контур) определенного уровня некоторых 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');
цвет линий изменился, показываемый уровень, как и ожидалось. Но цветная панель не изменяется соответственно. Есть идеи?