我還讓我打的情節軸固定的概念,而不是科學記數法顯示。對我而言,最令人沮喪的是,即使我將刻度標籤手動重新分配到固定標記後,「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));
哎呀,你是隻有幾秒快...... ;-)。無論如何,你應該用「ytick」和「yticklabel」替換「xtick」和「xticklabel」。第二行末尾的x應爲xt。 –
:) - 正要接到電話時! – robince
第二行末尾的x仍然是錯誤的。應該讀一下,我猜。 –