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

#matlab #sorting #plot #append #figure

#matlab #сортировка #график #добавить #рисунок

Вопрос:

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

Ответ №1:

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

 uistack(h,'top')
  

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

 chH = get(gca,'Children')
set(gca,'Children',[chH(end);chH(1:end-1)])
  

Комментарии:

1. Может ли этот результат также быть получен каким-либо образом путем ручного изменения порядка кривых в среде figure? Я попытался просто найти что-нибудь об этом в меню «щелкните правой кнопкой мыши», указав на одну из кривых.. Ничего не найдено.. Заранее спасибо!

2. @user1611107: не могу сказать о последней версии Matlab, но до 2016 года это было невозможно.

3. последний сверху возможен как oneliner (> = R2014b): axesHandle.Children = circshift(axesHandle.Children, 1);

Ответ №2:

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

 chH = get(gca,'Children')
set(gca,'Children',flipud(chH))
  

Ответ №3:

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

Ответ №4:

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