2012-07-01 27 views
5

tengo un mapa del terreno lo que me gustaría representar algunos datos en Ver la imagen siguiente:.de surf Matlab en distintos colores

enter image description here

El área a la derecha rodeada por el blanco es un surf separada función para el resto de la trama. Lo que me gustaría poder hacer es cambiar el esquema de colores. El exterior debe ser de escala de grises y el interior debe ser de un solo color en función de un valor que tengo separado de la trama. Actualmente he intentado cambiar la función de mapa de color (gris) pero eso cambia toda la trama.

Estoy abierto a sugerencias sobre diferentes estilos de trazado, es decir. plot3 en lugar de navegar. Entonces los datos que tengo para hacer estas dos olas son dos listas de puntos x, y, z.

Si es posible, también me gustaría mostrar una barra de color que represente el color del área en un círculo (que estableceré en función del valor exterior).

¿Alguien sabe de una buena manera de hacer esto?

Gracias.

EDIT:

lo que me gustaría hacer es esto:

enter image description here

La imagen no debe tener el color azul oscuro en la parte superior del montículo. La imagen se actualizará continuamente con más puntos "azules", el color debería cambiar en función de un valor externo e, idealmente, combinará los colores con los puntos anteriores si se superponen.

Respuesta

2

¿Has visto esto de MATLAB Tech Support?

http://www.mathworks.com/support/solutions/en/data/1-GNRWEH/index.html

Puede editar las propiedades colorbar.

g = colorbar; 
get(g) 

Por ejemplo,

% Define a colormap that uses the cool colormap and 
% the gray colormap and assign it as the Figure's colormap. 
colormap([cool(64);gray(64)]) 


% Generate some surface data. 
[X,Y,Z] = peaks(30); 


% Produce the two surface plots. 
h(1) = surf(X,Y,Z); 
hold on 
h(2) = pcolor(X,Y,Z); 
hold off 


% Move the pcolor to Z = -10. 
% The 0*Z is in the statement below to insure that the size 
% of the ZData does not change. 
set(h(2),'ZData',-10 + 0*Z) 
set(h(2),'FaceColor','interp','EdgeColor','interp') 
view(3) 


% Scale the CData (Color Data) of each plot so that the 
% plots have contiguous, nonoverlapping values. The range 
% of each CData should be equal. Here the CDatas are mapped 
% to integer values so that they are easier to manage; 
% however, this is not necessary. 


% Initially, both CDatas are equal to Z. 
m = 64; % 64-elements is each colormap 


cmin = min(Z(:)); 
cmax = max(Z(:)); 
% CData for surface 
C1 = min(m,round((m-1)*(Z-cmin)/(cmax-cmin))+1); 
% CData for pcolor 
C2 = 64+C1; 


% Update the CDatas for each object. 
set(h(1),'CData',C1); 
set(h(2),'CData',C2); 


% Change the CLim property of axes so that it spans the 
% CDatas of both objects. 
caxis([min(C1(:)) max(C2(:))]) 

% I added these two lines 
g = colorbar 
set(g,'YLim',[1 60]) 

Las dos últimas líneas son la mía. El resto es del enlace de soporte técnico de MATLAB. Y te dará una barra de colores con solo un mapa de colores. Si querías la mitad gris del mapa de colores, harías set(g,'YLim',[64 128]).

enter image description here

+0

Hey ¿Puede pensar en una forma de mostrar una barra de color para una sola parte de la pantalla? –

7

Puesto que usted quiere establecer el área de un círculo con un único color sólo, se puede establecer que es FaceColor propiedad. Por ejemplo:

%# make some test data 
[xx,yy]=ndgrid(-5:0.1:5,-5:0.1:5); 
zz = exp(-xx.^2/2+-yy.^2/2); 
zz1 = zz; 
zz1(zz1>0.5)=NaN; 
zz2 = zz; 
zz2(zz2<0.5)=NaN; 

%# plot first surface, set colormap 
surf(zz1) 
colormap('gray') 

%# stretch colormap to [0 0.5] 
caxis([0 0.5]) 

%# plot the second surface in red 
hold on 
surf(zz2,'faceColor','r') 

enter image description here

EDITAR

Si usted quiere tener diferentes mapas de colores para las partes de sus superficies, es necesario establecer la propiedad 'CData' de las superficies de los índices en el mapa de colores .Para mostrar solo un mapa de colores en la barra de colores, puede utilizar el hecho de que la barra de colores es simplemente otra gráfica, lo que significa que puede mostrar solo una parte y cambiar las etiquetas.

%# make some more test data 
[xx,yy]=ndgrid(-5:0.1:5,-5:0.1:5); 
zz = exp(-xx.^2/2+-yy.^2/2); 
zz1 = zz(1:50,:); 
zz2 = zz(52:end,:); 
xx1 = xx(1:50,:);xx2=xx(52:end,:); 
yy1 = yy(1:50,:);yy2=yy(52:end,:); 

%# create multi-colormap, set it to figure 
figure 
cmap = [gray(128);copper(128)]; 
colormap(cmap) 

%# plot surfaces, setting the cdata property to indices 1-128 and 129-256, 
%# respectively, in order to access the different halves of the colormap 
surf(xx1,yy1,zz1,'cdata',round(127*(zz1-min(zz1(:))/(max(zz1(:))-min(zz1(:)))))+1,'cdatamapping','direct') 
hold on 
surf(xx2,yy2,zz2,'cdata',round(127*(zz2-min(zz2(:))/(max(zz2(:))-min(zz2(:)))))+129,'cdatamapping','direct') 

%# find the handle to the colorbar 
%# alteratively: cbarH = findall(gcf,'tag','Colorbar') 
cbarH = colorbar; 

%# set limits and ticks/labels 
ylim(cbarH,[129 255]) 
set(cbarH,'ytick',[129 192 255],'yticklabel',[0 0.5 1]) 

enter image description here

+0

@Ben: Parece que he entendido mal tu pregunta: parece que quieres diferentes mapas de colores para diferentes partes de la superficie. He agregado un ejemplo de cómo hacer eso. – Jonas

+0

Gracias por eso, el problema que estoy tratando de resolver se ha vuelto un poco más complejo de nuevo. Me gustaría tener un esquema de color (es decir, escala de grises) para la mayoría del mapa, pero la sección media debería ser de un solo color, planeo seguir agregando estas olas con diferentes colores sólidos. Alguna idea de hacer eso? (Los colores representan un conjunto diferente de datos, estoy tratando de asignar estos datos en una superficie 3D representándolo con un rango de colores, estos datos van de 0 a 3 y son algo continuos). –

+0

@Ben: No estoy seguro de seguir. ¿Qué quiere decir "sección media"? ¿Es eso una parte diferente de la superficie? ¿Quieres tener una banda girando a una altura fija? ¿Qué quieres decir con un solo color? ¿Solo rojo, verde o un mapa de colores que va de negro-> verde en lugar de negro-> blanco? Sería útil si pudieras photoshop un ejemplo. – Jonas

Cuestiones relacionadas