Редактировать объекты внутри фигуры

У меня есть цифры (в формате файла Matlab fig), каждая из которых содержит линейный график с двумя линиями (представляющими кривые ЭЭГ), осями, набором меток и т. д.

Я хочу:

  1. изменить цвет линий
  2. удалить некоторые ярлыки

Я бы перебирал файлы fig и делал то же самое для каждого из них.

Есть ли список всех объектов на рисунке, которые я могу индексировать и редактировать? Как я могу добраться до этих объектов с помощью команд (т.е. без графического интерфейса)?


person jakub    schedule 27.11.2015    source источник
comment
Вы захотите просмотреть Children каждой фигуры. чтобы получить дескриптор ваших осей. Children осей — это линейные объекты, формирующие график, которые вы можете обратитесь напрямую и измените. То же самое касается легенды, но я не помню, это детище фигуры или осей; Я бы предположил топоры.   -  person excaza    schedule 27.11.2015
comment
Также может быть полезен findobj.   -  person excaza    schedule 27.11.2015
comment
Этот пост в блоге также может быть полезен: Редактирование существующего файла рисунка в MATLAB   -  person excaza    schedule 27.11.2015
comment
Неважно, редактируете ли вы один или тысячу. Как только вы узнаете, как редактировать один, вы можете продолжить простой цикл. Также см.: stackoverflow.com/questions/9329611/   -  person Trilarion    schedule 27.11.2015


Ответы (1)


Линия, метка и т. д. являются дочерними элементами оси, которая сама является дочерним элементом фигуры. Что вам нужно сделать, так это получить дескрипторы объектов, которые вы хотите изменить в этой иерархии.

% Get a handle to the figure 
hfig = openfig('testfig');

% Get all children of the CurrentAxes. Most of what you want is here.
axes_obj = allchild(hfig.CurrentAxes);

% Edit Axes object according to its type
For ii = 1:length(axes_obj)
    switch axes_obj(ii).Type
        case 'Text'
            % Do something, for example:
            axes_obj(ii).String = 'changed';
        case 'Line'
            % Do something, for example:
            axes_obj(ii).MarkerEdgeColor = 'b';
    end
end

% Save figure
savefig(hfig, 'testfig')

Вы можете просмотреть все свойства объекта, который хотите изменить, просто набрав axes_obj(ii) в командном окне.

person user3667217    schedule 27.11.2015