2012-07-01 18 views
5

ho una carta geografica del terreno, che mi piacerebbe rappresentare alcuni dati nella Vedere la foto qui sotto:.Matlab navigare con diverse combinazioni di colori

enter image description here

L'area sulla destra circondata da bianco è un surf separata funzione per il resto della trama. Quello che vorrei essere in grado di fare è cambiare la combinazione di colori. L'esterno dovrebbe essere in scala di grigi e l'interno dovrebbe essere un singolo colore basato su un valore che ho separato dalla trama. Al momento ho provato la funzione colormap (grigio), ma poi ho cambiato l'intera trama.

Sono aperto a suggerimenti su stili di stampa differenti, ad es. trama3 invece di navigare. Quindi i dati che devo fare questi due surf sono due liste di punti x, y, z.

Se possibile, vorrei anche visualizzare una barra di colore che rappresenta il colore dell'area cerchiata (che verrà impostata da me in base al valore esterno).

Qualcuno sa di un buon modo per farlo?

Grazie.

EDIT:

Quello che vorrei fare è questo:

enter image description here

L'immagine non dovrebbe avere il blu scuro nella parte superiore del tumulo. L'immagine sarà continuamente aggiornata con più macchie "blu", il colore dovrebbe cambiare in base a un valore esterno e idealmente unirà i colori con i punti precedenti se si sovrappongono.

risposta

2

Avete visto questo dal supporto tecnico MATLAB?

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

È possibile modificare le proprietà colorbar.

g = colorbar; 
get(g) 

Per esempio,

% 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]) 

Le ultime due righe sono mie. Il resto è dal link Supporto tecnico MATLAB. E ti darà una barra di colore con una sola mappa dei colori. Se si desidera la metà grigia della mappa colori, si dovrebbe fare set(g,'YLim',[64 128]).

enter image description here

+0

Hey si può pensare a un modo per visualizzare una barra di colore per una sola parte dello schermo? –

7

Dal momento che si desidera impostare l'area cerchiata a un singolo colore solo, è possibile impostare è FaceColor proprietà. Per esempio:

%# 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

EDIT

Se si desidera avere mappe di colori diversi per parti dei vostri superfici, è necessario impostare la proprietà 'CData' delle superfici da indici nella mappa di colori .Per mostrare una sola mappa di colori nella barra dei colori, puoi fare uso del fatto che la barra di colore è semplicemente un'altra trama, il che significa che puoi mostrare solo una parte di essa e cambiare le etichette.

%# 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: Sembra che possa aver frainteso la tua domanda: ti sembra di volere colori diversi per le diverse parti della superficie. Ho aggiunto un esempio di come farlo. – Jonas

+0

Grazie per quello, il problema che sto cercando di risolvere è tornato un po 'più complesso. Mi piacerebbe avere una combinazione di colori (ad esempio in scala di grigi) per la maggior parte della mappa, ma la sezione centrale dovrebbe essere un singolo colore che ho intenzione di continuare ad aggiungere questi surf con diversi colori solidi. Qualche idea su come farlo? (I colori rappresentano un diverso insieme di dati, sto cercando di mappare questi dati su una superficie 3d rappresentandoli con un intervallo di colori, questi dati vanno da 0 a 3 ed è un po 'continuo). –

+0

@ Ben: Non sono sicuro di seguirlo. Cosa intendi per "sezione centrale"? È una parte diversa della superficie? Vuoi avere una band in giro ad altezza fissa? Cosa intendi con il singolo colore? Solo rosso, o verde, o una mappa dei colori che diventa nero-> verde invece che nero-> bianco? Sarebbe utile se potessi fare un esempio con Photoshop. – Jonas

Problemi correlati