2012-05-04 86 views
11

我已在Matlab陰謀的刻度標記科學記數法,使用:刪除在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

是否有任何方法可以刪除科學記數法並且只有y標籤的範圍從-0.0025到0.0005?謝謝!

回答

9

您可以嘗試手動設置刻度標記自己使用的sprintf:

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

哎呀,你是隻有幾秒快...... ;-)。無論如何,你應該用「ytick」和「yticklabel」替換「xtick」和「xticklabel」。第二行末尾的x應爲xt。 –

+1

:) - 正要接到電話時! – robince

+1

第二行末尾的x仍然是錯誤的。應該讀一下,我猜。 –

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」標籤仍會保留在情節盒的邊緣。最後,感謝上面的帖子,我跟蹤了人物渲染器的問題。我正在使用'OpenGL'。當我更改爲'zbuffer'時,手動重置刻度標籤時,「x10^4」標籤將正常消失。 下面是一個示例代碼,將格式'###,###。0'應用於y軸標籤,甚至在縮放/平移等時動態更新y標籤,這要歸功於我發現的兩個有用功能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,格式)由Y.奧特曼,可參見: http://www.mathworks.com/matlabcentral/fileexchange/36254-ticklabelformat-set-a-dynamic-format-of-axes-tick-labels 或通過使用Google 'ticklabelformat MATLAB' 我修改它略微通過改變線105如下:

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

代替奧特曼的版本:

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

這種變化提供千位逗號分隔符功能 函數y = NumberFormatter(Numbers,FormatPattern)由S. Lienhard編寫, 也在Matlab File Exchange上。我修改的林哈德代碼版本 下面全給出:

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