Как да промените реда на линиите в 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
последният към върха е възможен като едноредов (›= 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. Децата могат да бъдат зададени само на пермутация на себе си“ В този случай използвах инструмента за избор на GUI на фигурата, за да изберете обектите на осите, след това вземете и задайте работа само с графиките, както се изисква, а не и с легендата. След като извикате 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