Matlab - 更改坐标轴倍数

5

你能告诉我如何更改轴的“乘数”吗?我的意思是图片中圈出来的值,比如说我想要x10^3而不是x10^4。

enter image description here

4个回答

5
自R2015b起,它是数字标尺属性的一部分。
ax = get(gca);
ax.YAxis.Exponent = -3;

3

这里有一个稍微有些棘手的解决方案:

  1. YTickMode设置为manual
  2. 设置您自己的YTickLabel
  3. 使用您想要的倍数将文本放置在顶部。

如下所示:

set(gca, 'YTickMode', 'manual');
set(gca, 'YTickLabel', get(gca,'YTick') / 1000);
text(0, 1.02 * get(gca,'YLim')(2), 'x 10^3');

在第三行尝试使用乘数1.02来调整你的文本位置。


1
你没有理解我的问题。我不想改变坐标轴的限制,而是改变坐标轴上的值。在我的例子中,我需要用x10^3倍数的值0、10、20、……、100来代替用x10^4倍数的值0、1、2、……、10在y轴上。 - kozooh
抱歉,我以为对数组使用num2str会创建一个新的字符串数组,而不是单行字符串。我还注意到,num2str是多余的。现在请再试一次。 - vz_
1
好的,现在它完美地工作了,只有一个例外。我不得不将 text(0, 1.02 * get(gca,'YLim')(2), 'x 10^3'); 更改为 tmp = get(gca,'YLim'); text(0, 1.02 * tmp(2), 'x 10^3');。也许我的版本不接受您的索引表达式类型。无论如何,这也是可以接受的答案。谢谢! - kozooh
我会在 text 中使用 '{\times}10^3' - sancho.s ReinstateMonicaCellio

1

1
这似乎是所有答案中最快的方法。如果有人遇到问题,这里是代码 tick2text(gca,'yformat', @(x) sprintf('%2u', x/10^9) 感谢 @Macduff。 - kozooh

1

将您的数据缩小0.1倍,这样您就得到了想要的乘数。

然后覆盖刻度标签,使刻度1.0标记为10,以此类推。


但是覆盖刻度标签会删除乘数,不是吗? - Luis Mendo
@Luis:我看到一些情况下没有这样做,但他们可能做了一些奇特的东西。 - Ben Voigt

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