Как изменить порядок линий на рисунке Matlab?

Имея график из трех кривых в файле .fig, я хотел бы добавить еще один график (с hold all и plot), но поместить его позади одной из уже существующих кривых (т.е. убедиться, что последний исходный кривая остается на переднем плане). Можно ли этого добиться без извлечения данных графика и повторного построения графика?


person Tobias Kienzler    schedule 06.10.2011    source источник


Ответы (4)


Если вы знаете дескриптор строки, которую вы хотите поставить сверху (например, потому что вы вызвали h = plot(...), вы можете использовать uistack

uistack(h,'top')

Кроме того, вы можете напрямую управлять порядком дочерних элементов ваших текущих осей. Следующее помещает самую последнюю кривую сверху.

chH = get(gca,'Children')
set(gca,'Children',[chH(end);chH(1:end-1)])
person Jonas    schedule 06.10.2011
comment
Можно ли также как-то получить этот результат, вручную изменив порядок кривых в среде рисунка? Я попытался просто найти что-нибудь об этом в контекстном меню, указав на одну из кривых.. Ничего не нашел.. Заранее спасибо! - person user1611107; 29.03.2018
comment
@ user1611107: не могу сказать о последней версии Matlab, но до 2016 года это было невозможно. - person Jonas; 29.03.2018
comment
последний к началу возможен как oneliner (›= R2014b): axesHandle.Children = circshift(axesHandle.Children, 1); - person j-hap; 23.04.2020

Разрешение, данное @Jonas с использованием свойства 'Children', не работает в заданном формате. Его следует изменить следующим образом:

chH = get(gca,'Children')
set(gca,'Children',flipud(chH))
person seyyed ali pourmousavi    schedule 06.05.2015

Когда у изображения есть легенда, пара get(gca,...) и set(gca,...) приводит к ошибке: «Ошибка при использовании set. Дочерние элементы могут быть установлены только для перестановки самого себя». В этом случае я использовал инструмент выбора графического интерфейса. фигуры, чтобы выбрать объекты осей, затем получить и настроить работу только с графиками по мере необходимости, а не с легендой. После вызова set вы должны обновить легенду, вызвав legend(...). У меня было 5 участков, которые мне нужно было переупорядочить. Если вы не уверены в порядке, переставляйте графики по два за раз, обновляйте легенду и смотрите, тот ли это порядок, который вам нужен.

person Hazem    schedule 01.05.2014

Свойство Children содержит ссылки, а порядок определяет стек графики.

Другой вариант, как получить список,

gcaChildrenList=gca.Children;

Таким образом, вы можете играть с такими заказами, как

gca.Children=gca.Children([2:end 1]);         % Put the topmost graphic in the bottom
gca.Children=gca.Children([end:-1:1]);        % Flip the stack
gca.Children=gca.Children([1:N-1 N+1:end N]); % Put Nth graphics ontop the stack

Протестировано на Matlab R2014b.

person Crowley    schedule 04.01.2019