2016-02-27 9 views
1

Я хочу покрасить прямоугольник в Matlab с «лицевой гранью перехода» (я не знаю правильного термина), например, переход от ада синего до синего; Вы можете также интерпретировать это как затенение (здесь вы можете увидеть пример:«Transition-FaceColor» в Matlab

http://il1.picdn.net/shutterstock/videos/620653/thumb/1.jpg?i10c=img.resize(height:160)

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

можно ли модифицировать стандартный (монохроматический) цвет от Matlab таким образом? И если да, то кто-то есть основные рамки для него?

ответ

0

Вы можете создать прямоугольник с помощью patch, который позволяет с интерполированными цветами лица.

Затем, чтобы цвет лица варьировался от синего до ярко-синего, вы должны определить свой собственный «синий» colormap.

colormap должен быть определен как (N x 3)RGB массива: в вашем случае вы должны установить на 0 первые две колонки (соответствующие red и green и имеют значения третьего столбца (в blue) в диапазоне от (start_blue,end_blue) где start_blue самый темный синий уровень вы хотите, end_blue самый яркий (оба должны быть между 0 и 1).

% Define the rectangle: lower left x, lower left y, width, height 
x_rect=1; 
y_rect=1; 
width=10; 
height=5; 
% Define the patch vertices and faces 
verts=[x_rect y_rect;x_rect y_rect+height; ... 
     x_rect+width y_rect+height;x_rect+width y_rect]; 
faces=[1 2 3 4]; 
% Define the color: the higher the brighter 
col=[0; 0; 4; 4]; 
figure 
% Create the new blue colormap 
b=0.7:.01:1; 
cm1=[zeros(length(b),2) b'] 
% Set the new colormap 
colormap(cm1) 
% Plot the patch 
patch('Faces',faces,'Vertices',verts,'FaceVertexCData',col,'FaceColor','interp'); 

в качестве альтернативы, вы можете создать прямоугольник как surf, то укажите свой собственный colormap, как указано выше.

% Define the rectangle: 
x_rect=1; 
y_rect=1; 
width=10; 
height=5; 
% Build a patch 
xp=[x_rect:x_rect+width]; 
yp=[y_rect:y_rect+height]; 
% Get the number of points 
n_xp=length(xp); 
n_yp=length(yp); 
% Create the grid 
[X,Y]=meshgrid(xp,yp); 
% Define the z values 
Z=ones(size(X)); 
% Create the color matrix as uniformly increasing 
C=repmat(linspace(1,10,n_xp),n_yp,1) 
% Create the new blue colormap 
start_blue=0.5; 
end_blue=1; 
b=start_blue:.01:end_blue; 
cm1=[zeros(length(b),2) b'] 
% Set the new colormap 
colormap(cm1) 
% Plot the rectangle as a "surf" 
surf(X,Y,Z,C) 
shading interp 

xlabel('X Axis') 
ylabel('Y Axis') 
view([0 90]) 
xlim([0 13]) 
ylim([0 9]) 
daspect([1 1 1]) 

enter image description here

Надеется, что это помогает.

Qapla '

+0

Удивительный! Это именно то, что я искал - вы описали его совершенно. Спасибо Вам большое! Вы использовали этот код по своему усмотрению в прошлом или создали его только для меня? Будучи последним, я очень благодарен за это :) Спасибо –

+0

Добро пожаловать, к счастью, я был вам полезен. Чтобы закрыть вопрос, не могли бы вы пометить ответ как «принятый». –