2012-05-04 21 views
11

मैं Matlab में एक साजिश बना दिया है की टिक लेबल में वैज्ञानिक संकेतन निकाला जा रहा है, का उपयोग करते हुए:एक मैटलैब साजिश

:

hold on 
plot(t1,Dx1,'r') 
xlabel('t (ps)') 
ylabel('Deviation of coordinate from initial coordinate (Å)') 
plot(t1,Dy1,'g') 
plot(t1,Dz1,'b') 
hold off 

हालांकि, y अक्ष पर टिक लेबल वैज्ञानिक अंकन में उत्पन्न कर रहे हैं Scientific Notation on y-axis

क्या कोई तरीका है कि मैं वैज्ञानिक नोटेशन को हटा सकता हूं और क्या वाई लेबल -0.0025 से 0.0005 तक हैं? धन्यवाद!

उत्तर

9

आप मैन्युअल रूप से स्थापित करने के लिए टिक खुद sprintf का उपयोग कर लेबल की कोशिश कर सकते:

yt = get(gca,'YTick'); 
set(gca,'YTickLabel', sprintf('%.4f|',yt)) 
+0

अरे, तुम थे केवल सेकंड तेज़ ... ;-)। वैसे भी, आपको "ytick" और "yxticklabel" को "ytick" और "yticklabel" द्वारा प्रतिस्थापित करना चाहिए। और दूसरी पंक्ति के अंत में एक्स को xt पढ़ना चाहिए। –

+1

:) - बस मुझे फोन कॉल मिलने के बारे में था! – robince

+1

दूसरी पंक्ति के अंत में एक्स अभी भी गलत है। मुझे पढ़ना चाहिए, मुझे लगता है। –

1

आप y अक्ष की टिक लेबल के प्रारूप को नियंत्रित करने के लिए इस कोड का उपयोग कर सकते हैं। यह कोड ticks_format.m से निकला है।

% यहां पसंदीदा टिक प्रारूप सेट करें।

y_formatstring = '%3.4f'; 

% यहां कोड है।

ytick = get(gca, 'ytick'); 
for i = 1:length(ytick) 
    yticklabel{i} = sprintf(y_formatstring, ytick(i)); 
end 
set(gca, 'yticklabel', yticklabel) 
2

आप निम्न लिखने के लिए है:

set(gcf, 'renderer', 'zbuffer') 
+0

@Andrew मुझे नहीं पता कि कैसे समझाया जाए, लेकिन यह वास्तव में काम करता है! –

4

मैं अपने भूखंड हो रही के साथ लड़ा तय धारणा के बजाय वैज्ञानिक अंकन में प्रदर्शित करने के लिए अक्ष। मेरे लिए सबसे निराशाजनक हिस्सा यह था कि "x10^4" लेबल साजिश बॉक्स के किनारे पर रहेगा, भले ही मैंने टिक्शन लेबल को मैन्युअल रूप से निश्चित नोटेशन पर पुन: असाइन किया हो। अंत में, उपरोक्त पद के लिए धन्यवाद, मैंने आंकड़े प्रस्तुतकर्ता के नीचे समस्या को ट्रैक किया। मैं 'ओपनजीएल' का उपयोग कर रहा था। जब मैं टिक लेबल को मैन्युअल रूप से रीसेट करता हूं तो जब मैं 'zbuffer' में बदल जाता हूं तो "x10^4" लेबल ठीक से गायब हो जाएगा। यहां एक उदाहरण कोड है जो y-axis लेबल में '###, ###। 0' प्रारूप को सेब करता है, और जब भी आप ज़ूम/पैन इत्यादि करते हैं तो वाई-लेबल्स को गतिशील रूप से अद्यतन करता है, धन्यवाद, Matlab फ़ाइल एक्सचेंज। अन्य दो कार्यों को खोजने के लिए जगह नीचे दी गई टिप्पणियों के रूप में शामिल है।

function []=TickFixExample() 

figure %this one works 
myRenderer='zbuffer'; 
set(gcf,'Renderer', myRenderer); 
axesh = axes(); 
set(gca,'YLim',[20000 20100]); 
title(myRenderer) 
ticklabelformat(gca,'y','###,###.0'); 

figure %this one doesn’t work 
myRenderer='OpenGL'; 
set(gcf,'Renderer', myRenderer); 
axesh = axes(); 
set(gca,'YLim',[20000 20100]); 
title(myRenderer) 
ticklabelformat(gca,'y','###,###.0'); 

समारोह ticklabelformat (hAxes, axName, प्रारूप) वाई ऑल्टमैन द्वारा, पर पाया जा सकता: http://www.mathworks.com/matlabcentral/fileexchange/36254-ticklabelformat-set-a-dynamic-format-of-axes-tick-labels या 'ticklabelformat matlab' googling द्वारा मैं थोड़ा लाइन 105 को बदलने के रूप में निम्नानुसार द्वारा इसे संशोधित:

tickLabels = arrayfun(@(x)(FormatNumberScalarInputStrOutput`(x,format)),tickValues,'UniformOutput',false);` 
ऑल्टमैन के संस्करण के एवज में

:

tickLabels = arrayfun(@(x)(sprintf(format,x)),tickValues,'UniformOutput',false); 

कि बदलाव के लिए प्रदान करता है हजारों अल्पविराम विभाजक कार्यक्षमता फ़ंक्शन वाई = नंबरफॉर्मेटर (संख्या, स्वरूप पैटर्न) एस लिएनहार्ड द्वारा मैटलैब फ़ाइल एक्सचेंज पर भी।Lienhard कोड का मेरा संशोधित संस्करण नीचे पूर्ण में दिया जाता है:

ax = gca; 
ax.YAxis.Exponent = 0; 

यहाँ एक उदाहरण है:

function y = FormatNumberScalarInputStrOutput(Number ,FormatPattern) 

% adapted 12-2012 by D. Bourgoyne from NUMBERFORMATTER by S. Lienhard 
% 
% The pound sign (#) denotes a digit, the comma is a placeholder for the 
% grouping separator, and the period is a placeholder for the decimal 
% separator. 
% The pattern specifies leading and trailing zeros, because the 0 
% character is used instead of the pound sign (#). 
% 
% Examples: 
% NumberFormatter(rand(5),'0.000') 
% NumberFormatter(rand(5)*100,'###,###.000') 
import java.text.* 
v = DecimalFormat(FormatPattern); 
y = char(v.format(Number)); 
3

कोशिश कुल्हाड़ियों बनाने के बाद इस जोड़ने

x = 0:0.1:10; 
y = 1000*x.^2; 

%Plot with default notation: 

subplot(1,2,1) 
plot(x,y) 


%Plot without exponent: 

subplot(1,2,2) 
plot(x,y) 
ax = gca 
ax.YAxis.Exponent = 0; 
+1

मैंने दर्जनों उत्तरों को पढ़ा, और यह सबसे अच्छा था !!! धन्यवाद @GHH! – user1271772