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));
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. –
:) - chỉ vừa mới nhận được cuộc gọi điện thoại! – robince
Dấu x ở cuối dòng thứ hai vẫn sai. Nên đọc yt, tôi đoán vậy. –