2013-08-26 19 views
7

Uso la funzione hist3() per tracciare la densità dei punti. Crea una griglia e trova il numero di punti in ogni griglia, quindi crea la trama. Ma i colori sulla trama sono discreti. Esiste un'opzione per rendere omogenea questa distribuzione, ovvero effettuare la transizione da un colore a un altro più agevole. Ora tutte le celle della griglia hanno colori diversi, dal sorriso al giallo e la distribuzione non è evidente.È possibile rendere più semplici i grafici di hist3?

Io uso il seguente codice.

axis equal; 
colormap(jet); 
n = hist3(final',[40,40]); 
n1 = n'; 
n1(size(n,1) + 1 ,size(n,2) + 1) = 0; 
xb = linspace(min(final(:,1)),max(final(:,1)),size(n,1)+1); 
yb = linspace(min(final(:,2)),max(final(:,2)),size(n,1)+1); 
pcolor(xb,yb,n1); 

Grazie in anticipo.

+1

check out il [ 'mappa colore()'] (http://www.mathworks.co.uk/help/matlab/ref/colormap. html). – Oleg

+0

Uso la mappa colori estate. Ho anche provato altre mappe di colori, ma non è stato d'aiuto. Semplicemente non voglio vedere quelle linee gird, ma voglio ottenere una transizione graduale da una cella all'altra. – bordart

+0

Utilizzare [interp2] (http://www.mathworks.fr/fr/help/matlab/ref/interp2.html) per creare una superficie interpolata dall'istogramma, quindi visualizzarla. – Bentoy13

risposta

7

Si consiglia di utilizzare la funzione di gridfit dal matlab file exchange. L'effetto liscio deriva sia dall'interpolazione (più punti da tracciare) sia dall'uso completo del colore disponibile (colormap jet qui). Notare che edgecolor è impostato su none in modo da rimuovere le righe nere.

Come qui utilizzato, prende l'output di hist3 (matrice 20x20) e lo interpola (100x100). Quindi traccia una superficie usando surf. Inoltre, è possibile rimuovere il commento dall'opzione camlight.

final = randn(1000,2)'; 
n = hist3(final',[20,20]); %binning 
figure('Color','w'); 

%your code with pcolor 
subplot(1,2,1); 
axis equal; 
colormap(jet); 
n1 = n'; 
n1(size(n,1) + 1 ,size(n,2) + 1) = 0; 
xb = linspace(min(final(:,1)),max(final(:,1)),size(n,1)+1); 
yb = linspace(min(final(:,2)),max(final(:,2)),size(n,1)+1); 
pcolor(xb,yb,n1) 


%density with gridfit function 
subplot(1,2,2); 
nb_interp_point = 100; 
[x,y] = meshgrid(1:size(n,1),1:size(n,2)); 
zgrid = gridfit(x(:), y(:), n, nb_interp_point, nb_interp_point); 
surf(zgrid,'EdgeColor','none') 
set(gca,'YDir','reverse'); 
view(-90,90); 
% camlight right 
% lighting phong 

Ecco il risultato

enter image description here

+0

Grazie mille. Questo è quello che volevo fare. – bordart

3

per sbarazzarsi delle griglie utilizzare il seguente:

hchild=get(gca,'children'); 
set(hchild,'edgecolor','none') 

colormap sono m X 3 (RGB) array. Sei libero di creare il tuo colormap. Per esempio si può restringere il campo della colormap che si sta utilizzando, come nel seguente esempio:

cmap=colormap(summer); 
range = [40:64]; % <-- here I am using a 64 element colorspace 
       % and narrowing the selection to the upper range 
nc = size(cmap,1); 

range = [range(1):(range(end)-range(1))/(nc-1):range(end)]; 
cmap(:,1)=interp1([1:nc],cmap(:,1),range); 
cmap(:,2)=interp1([1:nc],cmap(:,2),range); 
cmap(:,3)=interp1([1:nc],cmap(:,3),range); 
colormap(cmap) 
+0

Purtroppo non riesco a far funzionare questo codice. Potresti controllare per favore? – bordart

+0

@artalexan Risolto! Manca un -1 ... –

+0

Grazie mille. Questo è veramente utile! post scriptum Ho appena cancellato quelle parentesi, perché non erano necessarie. – bordart

Problemi correlati