强制使用指数格式的刻度线,就像MATLAB自动完成的那样

7
我有两个绘图,第一个图的y轴数值可达30000。因此,Matlab会用“3”替换Y轴标签,并在绘图上方使用“x10^4”。第二个图中,y轴数值只到达10000。由于这个值太小,无法自动切换到指数格式,所以它实际上打印出“10000”。
我想知道是否有一种方法来强制使用指数格式。这将导致与Matlab自动执行相同的格式。我之所以问这个问题,是因为我看到过解决方案,可以使Matlab直接打印“10^3”作为Y标签,但我只想让它显示“1”作为标签,并在绘图上方使用“x10^3”。
下面的图像将两个不同的图合并在一起,仅用于澄清我的问题。在图像的左半部分,您可以看到如果我使用大于10000的值,则Matlab会执行的操作。这就是我想要获取的格式,用于下面图片中所示的轴。
3个回答

3

我来这里是因为我需要类似的东西,现在我知道有解决方案了。 也许从R2015版本开始,你可以精确地设置指数:

ax.YAxis.Exponent = 3  % 3 is for example

或者,如果您想要完整的数字:

或者,如果您需要全面了解数字:

ax.YAxis.Exponent = 0

在IT技术中,“ax”通常用作“轴句柄”的表示。


2
根据一些阅读、测试和属性检查,似乎不可能实现:

http://www.mathworks.com/matlabcentral/answers/8005-axes-tick-in-scientific-notation

科学计数法标签仅在您未设置YTickLabel属性时自动出现。如果您设置了YTickLabel,则没有(记录的)方法让MATLAB以相同的方式自动放入指数。
为了解决这个问题,如果您设置了YTickLabel并且想要指数,您需要在希望它出现的位置上使用text()函数添加指数。
您可以按以下方式格式化y轴标签。
set(gca,'YTickLabel',sprintf('%3.1f|',get(gca,'ytick')/max(get(gca,'ytick'))

然后使用 TeX 标记 ('$\times10^4$') 将 x 乘以 10^4,手动得出相同的结果。

我手动添加了文本,但后面有一句 set(gca, 'LooseInset', get(gca, 'TightInset'));,这导致文本被剪切。所以我不得不手动调整:类似于 set(gca, 'LooseInset', [.0449 .1297 .0170 .06]); - damjeux

0

对我来说,使用'$[TeX]$'语法不起作用(R2012a)。相反,texlabel()可以工作。

然而,Matlab不允许在轴标签中解释TeX(至少不是2012a版本,而2013a的帮助似乎也不太有希望:例如set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'})

这里有一个解决方法,你可以使用text()函数自己制作标签。

plot(1:9,exp(-[1:9]))
set(gca,'XTick',[1 3 5 7 9],'XTicklabel',[])
arrayfun(@(x)text(x-.1,-.02,texlabel(sprintf('e^%d',x))),[1 5 9],'UniformOutput',false)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接