Вы устанавливаете нижний ylim()
на ноль , что не определено для логарифмической оси c. Я предполагаю, что есть некоторые внутренние маги c сброса пределов, когда они несовместимы с выбранным представлением оси. Вероятно, MATLAB внутренне выясняет, что нижний предел не работает, и автоматически сбрасывает его на c перед построением графика. Об этом свидетельствует тот факт, что все ваши графики имеют нижний предел точно для самой низкой точки данных на указанном графике, то есть с использованием нижнего предела MATLAB по умолчанию min(data(:))
.
При использовании 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");
ax.YScale = 'log'; % Object oriented handling of properties is preferred nowadays
end
Боковые примечания:
Я бы не рекомендовал использовать i
и j
в качестве переменных , поскольку они обозначают мнимую единицу и могут привести к трудным для отладки ошибкам.
Квадратные скобки при создании массива с использованием синтаксиса двоеточия, например, в вашем yticks()
, не нужны . При создании массива путем перечисления значений, разделенных запятыми / пробелами, например, в ylim([])
, необходимо использовать квадратные скобки.
Рисунок / линия / ось ручки в настоящее время объектно-ориентированы по стилю и могут быть установлены с помощью точечной индексации, как и структуры. Это может упростить ваш код, опуская аргументы set
и get
.