#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