在图形刻度中抑制指数格式化

时间:2010-08-27 21:34:35

标签: matlab plot labels number-formatting

勾选大于约10'000的刻度标签,例如格式化为1x10 ^ 4。而指数部分出现在相应的轴上方。这种不当行为也在on matlab central上得到了很好的描述,但没有解决方案。

感谢您的帮助。


'快速技巧'

set(gca, 'YTickLabel',get(gca,'YTick'))
应用于bar3时

不起作用,如下图所示。

bar3 plot failing

3 个答案:

答案 0 :(得分:8)

修改

根据此technical solution page,格式化刻度标签的推荐方法是这样(您可以使用任何数字格式化函数,如NUM2STR,SPRINTF,MAT2STR或任何其他..)

y = cool(7);
bar(y(:,1)*1e6)
set(gca, 'YTickMode','manual')
set(gca, 'YTickLabel',num2str(get(gca,'YTick')'))

alt text

然而,当涉及到Z轴时,似乎存在一个错误(标签格式正确,但指数乘数仍因某种原因显示!)

y = cool(7);
bar3(y*1e6, 'detached')
set(gca, 'ZTickMode','manual')
set(gca, 'ZTickLabel',num2str(get(gca,'ZTick')'))

alt text

最后,还有另一种解决方法,我们用文本对象替换刻度标签(请参阅此technical solution page作为参考):

y = cool(7);
bar3(y*1e6, 'detached')
offset = 0.25; Xl=get(gca,'XLim'); Yl=get(gca,'YLim'); Zt=get(gca,'ZTick');
t = text(Xl(ones(size(Zt))),Yl(ones(size(Zt)))-offset,Zt, num2str(Zt')); %#'
set(t, 'HorizontalAlignment','right', 'VerticalAlignment','Middle')
set(gca, 'ZTickLabel','')

alt text

答案 1 :(得分:3)

您可以尝试的另一个技巧是在绘制数据之前缩放数据,然后缩放刻度标签以使其看起来以不同的比例绘制。您可以使用函数LOG10来帮助您根据绘制的值自动计算适当的比例因子。假设您拥有变量xy中的数据,可以尝试以下方法:

scale = 10^floor(log10(max(y)));  %# Compute a scaling factor
plot(x,y./scale);                 %# Plot the scaled data
yTicks = get(gca,'YTick');        %# Get the current tick values
set(gca,'YTickLabel',num2str(scale.*yTicks(:),'%.2f'));  %# Change the labels

答案 2 :(得分:1)

更好地控制刻度标签并避免指数格式化的一种方法是使用文件交换中的TICK2TEXT

以下是一个例子:

y = cool(7); %# define some data
ah = axes; %# create new axes and remember handle
bar3(ah,y*1E6,'detached'); %# create a 3D bar plot
tick2text(ah, 'ztickoffset' ,-1.15,'zformat', '%5.0f', 'axis','z') %# fix the tick labels