我最近在尝试生成具有对数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
输出:
您正在将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
旁注:
我建议反对using i
and j
as variables,因为它们表示虚数单位,并且可能导致难以调试的错误。
在创建数组时,例如在i
中,方括号是j
。