2013-08-26 4 views
7

मैं बिंदुओं की घनत्व को साजिश करने के लिए hist3() फ़ंक्शन का उपयोग करता हूं। यह एक ग्रिड बनाता है और प्रत्येक ग्रिड में अंक की संख्या पाता है, फिर यह साजिश बनाता है। लेकिन साजिश पर रंग अलग हैं। क्या इस वितरण को चिकनी बनाने का कोई विकल्प है, यानी एक रंग से दूसरे चिकनी संक्रमण में बदलाव करें। अब ग्रिड की सभी कोशिकाओं में अलग-अलग रंग होते हैं, जो मुंह से पीले रंग तक होते हैं और वितरण स्पष्ट नहीं होता है।क्या हिस्ट 3 प्लॉट चिकना बनाना संभव है?

मैं निम्नलिखित कोड का उपयोग करता हूं।

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

अग्रिम धन्यवाद।

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

Colormaps मीटर x 3 (RGB) सरणियों हैं:

+1

जांच है [ 'रंग मैप()'] (http://www.mathworks.co.uk/help/matlab/ref/colormap। एचटीएमएल)। – Oleg

+0

मैं ग्रीष्मकालीन colormap का उपयोग करें। मैंने अन्य रंगमंच भी कोशिश की, लेकिन इससे मदद नहीं मिली। मैं बस उन गर्ड-लाइनों को नहीं देखना चाहता, लेकिन एक सेल से दूसरे में एक चिकनी संक्रमण प्राप्त करना चाहता हूं। – bordart

+0

हिस्टोग्राम से एक इंटरपोलेटेड सतह बनाने के लिए [इंटरप 2] (http://www.mathworks.fr/fr/help/matlab/ref/interp2.html) का उपयोग करें, फिर इसे प्रदर्शित करें। – Bentoy13

उत्तर

7

आप matlab file exchange से gridfit फ़ंक्शन का उपयोग कर सकते हैं। चिकनी प्रभाव इंटरपोलेशन (साजिश के लिए अधिक अंक) और उपलब्ध रंग (colormap jet) का पूर्ण उपयोग दोनों से आता है। ध्यान दें कि edgecolornone पर सेट है ताकि ब्लैक लाइन हटा दी जा सके।

जैसा कि यहां उपयोग किया जाता है, यह हिस्ट 3 (20x20 मैट्रिक्स) का उत्पादन लेता है और इसे (100x100) इंटरपोलेट करता है। इसके बाद surf का उपयोग करके सतह की साजिश रहीं। इसके अतिरिक्त, आप 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 

यहाँ परिणाम

enter image description here

+0

आपको बहुत बहुत धन्यवाद। यही वह है जो मैं करना चाहता था। – bordart

3

निम्नलिखित ग्रिडलाइनें से छुटकारा पाने के लिए प्रयोग करें। आप अपना खुद का colormap बनाने के लिए स्वतंत्र हैं। उदाहरण के लिए आप, colormap की सीमा का उपयोग कर रहे संकीर्ण कर सकते हैं निम्न उदाहरण में:

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

दुर्भाग्य से मैं यह कोड काम नहीं कर सकता। क्या आप कृपया इसे चेक कर सकते? – bordart

+0

@artalexan फिक्स्ड! मिस्ड ए -1 ... –

+0

आपको बहुत बहुत धन्यवाद। यह वास्तव में उपयोगी है! अनुलेख मैंने अभी उन ब्रैकेट को हटा दिया, क्योंकि वे आवश्यक नहीं थे। – bordart

संबंधित मुद्दे