Когда вы рисуете что-то в Matlab, последний построенный ряд данных помещается поверх всего, что уже есть. Например:
figure; hold on
plot(sin(linspace(0,pi)),'linewidth',4,'color',[0 0 1])
plot(cos(linspace(0,pi)),'linewidth',4,'color',[1 0 0])
Здесь красная линия показана поверх синей линии (там, где они пересекаются). Есть ли способ установить «насколько глубоко» рисуется линия, чтобы можно было построить график под, что уже есть?





Используйте команду uistack. Например:
h1 = plot(1:10, 'b');
hold on;
h2 = plot(1:10, 'r');
построит две линии с красной линией поверх синей. Если вы сделаете:
uistack(h1);
синяя линия будет выведена на передний план.
@Will - Хорошее замечание. Для OP: есть некоторые другие входные аргументы для uistack, которые позволяют более сложные настройки порядка наложения. Вы можете узнать об этом, набрав «help uistack» в командной строке.
Вы также можете сделать это, установив порядок дочернего вектора текущих осей. Если вы сделаете следующее:
figure; hold on
h1 = plot(sin(linspace(0,pi)),'linewidth',4,'color',[0 0 1]);
h2 = plot(cos(linspace(0,pi)),'linewidth',4,'color',[1 0 0]);
h = get(gca, 'Children');
вы увидите, что h - это вектор, содержащий h1 и h2. Графический порядок наложения представлен порядком маркеров в h. В этом примере, чтобы изменить порядок наложения, вы можете сделать:
h = flipud(h);
set(gca, 'Children', h);
В конце концов, я думаю, что написание полезной функции для этой цели станет повторной реализацией uistack :) Тем не менее, хороший момент.
Этот подход оказался для меня на несколько порядков быстрее, чем использование uistack. Время выполнения увеличилось с 15 минут до менее одной секунды.
Спасибо, я этого тоже не знал. И наоборот, uistack (h2, 'bottom') отправит красную строку вниз, что именно то, что мне нужно.