2013-08-26 20 views
7

Noktaların yoğunluğunu çizmek için hist3() işlevini kullanıyorum. Bir ızgara oluşturur ve her kılavuzdaki nokta sayısını bulur, sonra arsa oluşturur. Fakat arsadaki renkler ayrık. Bu dağılımı pürüzsüz hale getirmek, yani bir renkten diğerine daha yumuşak geçiş yapmak için bir seçenek var mı. Artık ızgaradaki tüm hücreler grinden sarıya farklı renklere sahip ve dağılımı belli değil.Hist3 grafik pürüzsüz hale getirmek mümkün mü?

Aşağıdaki kodu kullanıyorum.

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

Şimdiden teşekkürler.

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

renk haritaları m x 3 (rgb) diziler şunlardır:

+1

kontrol dışı [ 'renk haritası() '] (http://www.mathworks.co.uk/help/matlab/ref/colormap. html). – Oleg

+0

Yaz renk eşlemini kullanıyorum. Başka renk haritaları da denedim, ama yardımcı olmadı. Ben sadece bu kuş çizgilerini görmek istemiyorum, ama bir hücreden diğerine yumuşak bir geçiş yapmak istiyorum. – bordart

+0

Histogramdan enterpolasyonlu bir yüzey oluşturmak için [interp2] (http://www.mathworks.fr/fr/help/matlab/ref/interp2.html) öğesini kullanın, ardından görüntüleyin. – Bentoy13

cevap

7

Sen matlab file exchange den gridfit işlevini kullanmak isteyebilir. Pürüzsüz etki, enterpolasyondan (arsaya daha fazla nokta) ve mevcut rengin tam kullanılmasından (colormap jet buradan) gelir. Siyah çizgilerin kaldırılması için edgecolor'un none olarak ayarlandığını unutmayın.

Burada kullanıldığı gibi hist3 (20x20 matris) çıktısını alır ve enterpolasyon yapar (100x100). Daha sonra surf kullanarak bir yüzey çizilir. Ayrıca, camlight seçeneğini de engelleyebilirsiniz.

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 

Burada sonuç

enter image description here

+0

Çok teşekkür ederim. Yapmak istediğim buydu. – bordart

3

aşağıdaki kılavuz çizgilerinin kullanın kurtulmak için. Kendi colormap'u oluşturmakta özgürsünüz. Örneğin aşağıdaki örnekte olduğu gibi, kullandığınız colormap aralığını daraltabilirsiniz:

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

Maalesef bu kodu çalışamıyorum. Kontrol edermisin lütfen? – bordart

+0

@artalexan Sabit! Cevapsız bir -1 ... –

+0

Çok teşekkür ederim. Bu gerçekten yararlı! Not; Bu parantezleri yeni sildim, çünkü gerekli olmadı. – bordart

İlgili konular