2014-04-29 5 views
8

मैं कूद के बाद आंकड़ा के अनुसार डबल नीचे x- अक्ष साजिश कोशिश कर रहा हूँ:MATLAB: साजिश डबल नीचे x- अक्ष

enter image description here

यह अतिरिक्त विशिष्ट साथ घंटों में एक semilogx-साजिश है मिनट, महीनों और वर्षों का प्रतिनिधित्व करने वाली टिक। मैं इन अतिरिक्त टिक कैसे बना सकता हूं?

उत्तर

2

आप साजिश में एक और धुरी वस्तु जोड़कर और उसके टिक अंकों के गुणों को सेट करके ऐसा कर सकते हैं। कुछ इस तरह:

close all 
plot(1:10, 1:10) 
set(gca,'XTick',[1:2:10]) 
haxes1 = gca; 
set(haxes1, 'TickDir', 'out') 
haxes1_pos = get(haxes1,'Position'); % store position of first axes 
haxes2 = axes('Position',haxes1_pos); 
set(gca, 'Color', 'none') 
set(haxes2, 'YTick', []) 
set(haxes2, 'XTickMode', 'manual'); 
set(haxes2, 'XTick', [ 0.1 0.8]) 
set(haxes2, 'TickDir', 'in') 

इस उदाहरण में कोड के अलावा, आप टिक लेबल और अक्ष रेंज को संपादित करने के अतिरिक्त कुल्हाड़ियों आपत्ति होगा। XLim और XTickLabel गुणों के संदर्भ के लिए here देखें जो ऐसा करते हैं।

MATLAB वर्तमान में अक्षों के अंदर टिक लेबल का समर्थन नहीं करता है। एक तृतीय पक्ष फ़ंक्शन जो इसे संभालता है here पाया जा सकता है।

+0

एक समस्या: इस तरह आप अंदरूनी चीजें प्राप्त करते हैं लेकिन अंदर के लेबल को टिक नहीं करते हैं। –

+0

इसके अलावा, अंत में मूल रूप से प्लॉट किए गए डेटा अदृश्य हैं। –

+0

मैंने अपने उत्तर में दोनों टिप्पणियों को संबोधित किया है। –

6

आप विक्टर मई के माध्यमिक अक्षरों को ओवरले करने के दृष्टिकोण का उपयोग कर सकते हैं, लेकिन इसे वास्तव में काम करने के लिए और अधिक tweaking की जरूरत है। ,

clear, close 
time = [1/60, 1, 24, 24*7, 24*30, 24*30*6, 24*365, 24*365*10]; 
r = [110, 90, 80, 75, 70, 65, 63, 60]; 

% plot the data 
semilogx(time, r, 'o-') 

% adjust ticks and format of primary axes 
xlim([0.005 1e6]) 
ylim([0 140]) 
tick = 10 .^ (-2 : 6); 
set(gca, 'XTick', tick) 
set(gca, 'XTickLabel', arrayfun(@num2str, tick, 'UniformOutput', false)) 
set(gca, 'XMinorTick', 'off') 
set(gca, 'TickDir', 'out') 

enter image description here

एक माध्यमिक कुल्हाड़ियों केवल ठीक से काम करता है अगर यह प्राथमिक रूप में एक ही स्थिति, आकार, अक्ष सीमा, और बड़े पैमाने प्रकार है डालने:

सबसे पहले, के मूल कथानक को पुन: चलो और अगर इसकी पृष्ठभूमि पारदर्शी है (अन्यथा डेटा छिपा हो जाते हैं):

% put matching secondary axes on top with transparent background 
pos = get(gca, 'Position'); 
axes('Position', pos) 
set(gca, 'Color', 'none') 
xlim([0.005 1e6]) 
ylim([0 140]) 
set(gca, 'XScale', 'log') 
set(gca, 'XMinorTick', 'off') 
set(gca, 'TickDir', 'out') 

देते यह उचित टिक और टिक लेबल

% adjust ticks 
set(gca, 'YTick', []) 
set(gca, 'XTick', time) 
label = {'1 min', '1 hour', '24 hours', '1 week', '1 month', '6 months', '1 year', '10 years'}; 
set(gca, 'XTickLabel', label) 

परिणाम

enter image description here

में - नहीं हम वास्तव में क्या चाहते हैं।

एक चाल हम टिक जाने और टिक माध्यमिक कुल्हाड़ियों के लेबल के अंदर जा सकते हैं के साथ

...

% tinker with it 
set(gca, 'XAxisLocation', 'top') 
pos(4) = eps * pos(4); 
set(gca, 'Position', pos) 

enter image description here

... लेकिन है कि अभी भी वास्तव में हम क्या चाहते हैं नहीं है।


एक अलग रणनीति: चलो अक्षरों को ओवरले नहीं करते हैं, लेकिन अपने आप में अतिरिक्त टिक डालते हैं!

label = {'1 min', '1 hour', '24 hours', '1 week', '1 month', '6 months', '1 year', '10 years'}; 
line([time', time'], [0 2], 'Color', 'k') 
text(time, 4 * ones(size(time)), label, 'Rotation', 90, 'VerticalAlignment', 'middle') 

परिणाम

enter image description here

अभी भी सही है, लेकिन उपयोगी नहीं है।

+1

टेक्स्ट() के साथ अंतिम समाधान भी मेरे लिए काम करता है, धन्यवाद! – gaborous

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