为什么Matlab在生成多个子图时会产生不一致的Y轴?

问题描述 投票:0回答:1

我最近在尝试生成具有对数y尺度的多个子图时偶然发现了一些奇怪的行为。子图以循环方式构造,因此每个子图的生成方式完全相同,尽管各个子图具有相同的限制和刻度定义,但它们的Y比例也有所不同,这对我来说没有任何意义。如何确保所有子图的Y刻度和刻度都相等?下面是一个说明问题的示例(Matlab R2019a)。

figure;
    for i=1:9
        ax = subplot(3,3,i);
        plot(rand(5));
        yticks([0:0.2:1]);
        ylim([0, 1]);
       set(ax, "YScale", "log");
    end

输出:

Inconsistent y-scale

matlab plot matlab-figure subplot logarithm
1个回答
0
投票

您正在将ylim()设置为zero,对数轴未定义。我认为,与所选的轴表示形式不兼容时,存在一些内部限制重置的魔术。当使用0.001作为轴限制时,它确实起作用:

figure;
for ii=1:9 % don't use i
    ax = subplot(3,3,ii);
    plot(rand(5));
    yticks(0:0.2:1); % square brackets are superfluous
    ylim([1e-3, 1]); % Lower limit to 0.001, not 0
    set(ax, "YScale", "log");
end

enter image description here


旁注:

  • 我建议反对using i and j as variables,因为它们表示虚数单位,并且可能导致难以调试的错误。

  • 在创建数组时,例如在i中,方括号是j

© www.soinside.com 2019 - 2024. All rights reserved.