2010-08-30 7 views
7

मैं इस तरह एक 3 डी साजिश है: x1, x2, x3:MATLAB में मैं 3-डी बार समूह और वाई-अक्ष लेबलिंग को कैसे समायोजित कर सकता हूं?

alt text

साजिश के y- अक्ष पर, तीन बार के प्रत्येक समूह के समान पैरामीटर को दर्शाता है। मैं तीन बार के प्रत्येक समूह के लिए वाई-अक्ष पर एक रिक्ति रखना चाहता हूं, ताकि यह और स्पष्ट हो जाए कि वे बार समान पैरामीटर का जिक्र कर रहे हैं। उसी समय, मैं तीन बार के प्रत्येक समूह के लिए वाई-अक्ष पर एक लेबल रखना चाहता हूं। उदाहरण के लिए, वाई-अक्ष के लिए निम्न लेबल लेआउट वांछित होगा:

x1 x2 x3 x1 x2 x3 x1 x2 x3 
    grid1  grid2  grid3 

कोई सुझाव स्वागत से अधिक है! कोड है कि मैं सलाखों प्लॉट करने के लिए प्रयोग किया जाता है नीचे दिया गया है

Z = rand(9,5); 
h = bar3(Z); 
[r c] = size(Z); 

zdata = []; 
for i = 1:c 
    zdata = []; 
    for j = 1:r 
     zdata = [zdata; ones(6,4)*Z(j,i)]; 
    end 
set(h(i),'Cdata',zdata) 
end 
colormap 
colorbar 
set(gca,'YTickLabel',['x1';'x2';'x3';'x1';'x2';'x3';'x1';'x2';'x3']); 
view([-64 44]); 

उत्तर

10

आप जिस पर पदों का संकेत के साथ सलाखों के कॉलम जगह bar3 के लिए एक अतिरिक्त इनपुट निर्दिष्ट करके सलाखों के अपने समूहों के बीच में खाली स्थान जोड़ सकते हैं वाई धुरी तुम भी समारोह text का उपयोग कर अपने कुल्हाड़ियों में अतिरिक्त लेख प्लॉट कर सकते हैं:

Z = rand(9, 5);    % Some random sample data 
[r, c] = size(Z);   % Size of Z 
Y = [1 2 3 5 6 7 9 10 11]; % The positions of bars along the y axis 
C = mat2cell(kron(Z, ones(6, 4)), 6*r, 4.*ones(1, c)).'; %' Color data for Z 

hBar = bar3(Y, Z);   % Create the bar graph 
set(hBar, {'CData'}, C);  % Add the color data 
set(gca, 'YTickLabel', {'x1' 'x2' 'x3'}); % Modify the y axis tick labels 
view(-70, 30);    % Change the camera view 
colorbar;     % Add the color bar 
text(-2, 2, 'grid1');  % Add "grid1" text 
text(-2, 6, 'grid2');  % Add "grid2" text 
text(-2, 10, 'grid3');  % Add "grid3" text 

enter image description here

नोट आप उन्हें प्राप्त करने के लिए अपने पाठ वस्तुओं के x और y मान को समायोजित करने के लिए हो सकता है रेंडर करने के लिए अपने इच्छित स्थान पर आपके द्वारा चुने गए कैमरे के दृश्य के लिए।

संपादित करें:

आप भी प्रत्येक पट्टी के ऊपर मूल्यों को प्रदर्शित करना चाहते हैं, तो आप उस जोड़कर ऊपर कोड के लिए निम्न कर सकते हैं:

hText = text(kron((1:c).', ones(r, 1)), ... %' Column of x values 
      repmat(Y(:), c, 1), ...   % Column of y values 
      Z(:)+0.05, ...      % Column of z values 
      num2str(Z(:)), ...     % Text strings 
      'HorizontalAlignment', 'center'); % Center the strings 

यह बताया जाना चाहिए बाहर यह है कि इस प्लॉट किए गए पाठ को थोड़ा गन्दा हो जाता है, क्योंकि कुछ पाठ ओवरलैपिंग या बार के पीछे छुपाए जाएंगे। पाठ भी थोड़ा अनावश्यक है, क्योंकि बार के रंग वास्तव में मूल्य दिखाने के लिए हैं।

+2

+1 मुझे लगता है कि कुछ प्रकार का क्रमिक कोलोरैप बेहतर दिखाई देगा: 'रंगमंच (फ्लिपूड (गर्मी)) ' – Amro

+0

@ एमोरो: हाँ, एक अलग रंगरूप बेहतर दिखाई देगा। मैं ओपी के लिए पूछे गए संशोधनों के साथ मूल आकृति को फिर से पेश करने की कोशिश कर रहा था। – gnovice

+0

धन्यवाद, यह एक आकर्षण की तरह काम करता है! मुझे प्रत्येक बार के शीर्ष पर प्लॉट करने की आवश्यकता है, इससे जुड़ा मूल्य (जेड से आ रहा है)। मैं sth कर रहा था। जैसे: एच = टेक्स्ट (mymat (:, 1), mymat (:, 2) -0.20, ज़ेड (:), num2str (Z (:))); जहां माइमेट का उपयोग इंडेक्स के मैट्रिक्स के रूप में किया जाता है। क्या आपको पता है, अगर ऐसा करने का एक और अधिक प्रभावी तरीका है? मेरे मामले में, मैंने 'mymat' भर दिया: पंक्तियां = 5; cols = 9; mymat = शून्य (पंक्तियां * कोल्स, 2); के = 1; J = 1 के लिए : पंक्तियों के लिए i = 1: cols mymat (k, 1) = j; मायमत (के, 2) = i; के = के + 1; अंत अंत शुभकामनाएं – Javier

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

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