2013-08-26 10 views
7

Ich benutze hist3() -Funktion, um die Dichte von Punkten zu plotten. Es erstellt ein Raster und findet die Anzahl der Punkte in jedem Raster, dann erstellt es das Diagramm. Aber die Farben auf der Handlung sind diskret. Gibt es eine Option, diese Verteilung glatt zu machen, d. H. Den Übergang von einer Farbe zu einer anderen glatter zu machen. Jetzt haben alle Zellen des Gitters verschiedene Farben, von Grinsen bis Gelb und die Verteilung ist nicht offensichtlich.Ist es möglich, Hist3-Plots glatter zu machen?

Ich verwende den folgenden Code.

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); 

Vielen Dank im Voraus.

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

Farbtabellen sind m x 3 (RGB) Arrays:

+1

Check-out die [ 'colormap()'] (http://www.mathworks.co.uk/help/matlab/ref/colormap. html). – Oleg

+0

Ich benutze Sommer Colormap. Ich habe auch andere Colormaps ausprobiert, aber es hat nicht geholfen. Ich will diese Gürtellinien einfach nicht sehen, aber ich möchte einen reibungslosen Übergang von einer Zelle zur anderen erreichen. – bordart

+0

Verwenden Sie [interp2] (http://www.mathworks.fr/fr/help/matlab/ref/interp2.html), um eine interpolierte Oberfläche aus dem Histogramm zu erstellen, und zeigen Sie sie dann an. – Bentoy13

Antwort

7

Sie können das gridfit Funktion aus dem matlab file exchange verwenden. Der glatte Effekt ergibt sich sowohl aus der Interpolation (mehr Punkte zur Darstellung) als auch aus der vollen verfügbaren Farbe (colormap jet hier). Beachten Sie, dass edgecolor auf none eingestellt ist, so dass die schwarzen Linien entfernt werden.

Wie es hier verwendet wird, nimmt es die Ausgabe von hist3 (20x20-Matrix) und interpoliert es (100x100). Dann plotten sie eine Oberfläche unter Verwendung von surf. Darüber hinaus können Sie die Option camlight auskommentieren.

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 

Hier ist das Ergebnis

enter image description here

+0

Vielen Dank. Das wollte ich tun. – bordart

3

Um der Gitternetzlinien verwenden Sie die folgende loszuwerden. Sie können Ihre eigenen colormap erstellen. Zum Beispiel Sie den Bereich der colormap verengen können Sie verwenden, wie im folgenden Beispiel:

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

Leider kann ich diesen Code nicht funktionieren lassen. Könnten Sie das bitte prüfen? – bordart

+0

@artalexan Korrigiert! Verpasste eine -1 ... –

+0

Vielen Dank. Das ist wirklich nützlich! p.s. Ich habe diese Klammern gelöscht, weil sie nicht notwendig waren. – bordart

Verwandte Themen