Кажется, что нет никакого способа использовать разные colormap
, чтобы получить желаемый эффект, поскольку цветовая палитра «принадлежит» к figure
.
Я нашел возможное решение, которое не использует colormap
.
Он основан на задании цветовой матрицы при вызове surf
, один для всей матрицы, один для выделенного раздела, затем наложение второго на первый.
К сожалению, я не смог установить первое объявление серого цвета.
Я использовал peaks
матрицу вместо вашей «randi
» для того, чтобы иметь более гладкую поверхность, чтобы работать и вставить скрипт в for loop
, чтобы выделить различные части матрицы
% Mat = randi(100,100,100); % Matrix to be plotted in gray scale
% Alternative definition of the Matrix to be displayed
n_pt=50;
Mat=peaks(n_pt);
% Generate meshgrid
x=1:n_pt;
y=1:n_pt;
[X,Y]=meshgrid(x,y);
ind_highlight_2 = 5; % Number of rows of the matrix to be highlighted
% Generate two set of color matrix
% The first on for the whole surf
% The second one for the section to be highlighted
a=randi(2,n_pt,n_pt);
b=randi(10,n_pt,n_pt);
for i=1:n_pt-ind_highlight_2
ind_highlight_1 = i; % Starting row of the matrix to be highlighted
Mat2 = Mat;
% Modified set of data (in the original just one row was left
% Mat2([1:ind_highlight-1, ind_highlight+1:end] ,:) = NaN
Mat2(ind_highlight_1:ind_highlight_1+ind_highlight_2,:) = NaN;
COL=a;
COL(ind_highlight_1:ind_highlight_1+ind_highlight_2,:)=b(ind_highlight_1:ind_highlight_1+ind_highlight_2,:);
% Plot the surf specifying the color
s_h=surf(X,Y,Mat,COL);
shading interp
% view([0 90])
% f_name=['jpg_name_' num2str(i)]
% print('-djpeg75',f_name)
pause(.1);
end
Надеюсь, это поможет.
вещь с использованием «удержания» для сюжета для серфинга заключается в том, что перекрытие не выполняется по слою (как вы могли себе представить), что часто приводит к плохим результатам. Я думаю, что лучший способ - на самом деле сделать пост-обработку, сгенерировать график и перейти к чему-то вроде Photoshop, чтобы сделать замену цвета. – GameOfThrows