2012-05-04 43 views
11

Tôi đã thực hiện một âm mưu trong Matlab, sử dụng:Loại bỏ ký hiệu khoa học trong nhãn đánh dấu của một âm mưu 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 

Tuy nhiên, nhãn đánh dấu trên trục y được tạo ra trong ký hiệu khoa học:

Scientific Notation on y-axis

Có cách nào tôi có thể xóa ký pháp khoa học và chỉ có phạm vi nhãn y từ -0,0025 đến 0,0005 không? Cảm ơn!

Trả lời

9

Bạn có thể thử thiết lập thủ công đánh dấu nhãn cho mình sử dụng sprintf:

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

Argh, bạn đã chỉ giây nhanh hơn ... ;-). Dù sao, bạn nên thay thế "xtick" và "xticklabel" bằng "ytick" và "yticklabel". Và x ở cuối dòng thứ hai nên đọc xt. –

+1

:) - chỉ vừa mới nhận được cuộc gọi điện thoại! – robince

+1

Dấu x ở cuối dòng thứ hai vẫn sai. Nên đọc yt, tôi đoán vậy. –

1

Bạn có thể sử dụng mã này để kiểm soát các định dạng của nhãn đánh dấu của trục y. Mã này bắt nguồn từ ticks_format.m.

% Đặt định dạng ưa thích tại đây.

y_formatstring = '%3.4f'; 

% Đây là mã.

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

Bạn phải viết như sau:

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

@Andrew Tôi không biết cách giải thích, nhưng nó thực sự hiệu quả! –

4

Tôi cũng đã chiến đấu với nhận âm mưu của tôi trục để hiển thị trong khái niệm cố định thay vì ký hiệu khoa học. Phần khó chịu nhất đối với tôi là nhãn "x10^4" sẽ vẫn ở trên cạnh của hộp âm mưu ngay cả sau khi tôi gán lại nhãn đánh dấu theo cách thủ công cho ký hiệu cố định. Cuối cùng, nhờ vào bài viết ở trên, tôi đã theo dõi vấn đề xuống trình kết xuất hình. Tôi đã sử dụng 'OpenGL'. Khi tôi thay đổi thành 'zbuffer', nhãn "x10^4" sẽ biến mất hoàn toàn khi tôi đặt lại các nhãn đánh dấu theo cách thủ công. Dưới đây là một mã ví dụ có định dạng '###, ###. 0' đến các nhãn trục y và thậm chí cập nhật động các nhãn y khi bạn phóng to/thu nhỏ, nhờ có hai hàm hữu ích mà tôi tìm thấy Trao đổi tệp Matlab. Nơi để tìm hai hàm khác được bao gồm dưới dạng hàm bình luận bên dưới.

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

chức năng ticklabelformat (hAxes, axName, định dạng) của Y. Altman, có thể được tìm thấy tại địa chỉ: http://www.mathworks.com/matlabcentral/fileexchange/36254-ticklabelformat-set-a-dynamic-format-of-axes-tick-labels hoặc bằng cách googling 'ticklabelformat matlab' tôi sửa đổi nó một chút bằng cách thay đổi dòng 105 như sau:

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

thay Altman phiên bản:

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

rằng sự thay đổi quy định chức năng tách dấu phẩy hàng ngàn bởi chức năng y = NumberFormatter (Numbers, FormatPattern) của S. Lienhard, cũng trên Matlab File Exchange.phiên bản sửa đổi của tôi mã Lienhard được đưa ra trong đầy đủ dưới đây:

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

Hãy thử thêm này sau khi tạo các trục:

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

Dưới đây là một ví dụ:

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

Tôi đã đọc hàng chục câu trả lời và đây là câu trả lời hay nhất !!! Cảm ơn bạn @GHH! – user1271772

Các vấn đề liên quan