Matlab повторно использует легенды и форматирование - PullRequest
2 голосов
/ 08 февраля 2012

У меня есть ряд графиков.Мне нужно сделать некоторое форматирование этих графиков.Как и мне нужно изменить метки, нарисовать несколько линий, затем разместить легенды, отформатировать размер шрифта, цвета и т. Д. На всех этих графиках.Эти графики являются файлами .fig.

У меня нет точек данных на графике, и опция создания кода занимает очень много времени для обработки.А графики являются точечными.

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

Спасибо

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Если я правильно понимаю, вы сможете просто открывать рисунки по одному, а затем применять желаемое форматирование.Что-то вроде:

fileList = dir('*.fig')
for ix = 1:length(fileList)
    h = open(fileList(ix).name);

    %Now operate on the figure with handle h
    %e.g.
    axis(h,[0 10 -3 3]);
    legend(h,'Data1','Data2');
    hold on
    plot(-10:10, x.^2,'k-'); 

    %Then get whatever output you want, e.g. save, print, etc.
end
1 голос
/ 08 февраля 2012

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

Вы можете получить свойства фигуры, осей, линий и т. Д. Как структуры, но многие из них доступны только для чтения.

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

Если ваша фигураall scatter, тип объекта - это либо line (если вы используете plot), либо hggroup (если вы используете scatter).Так что он пример того, как это можно сделать.

fstd = hgload('standard.fig'); %# load standard figure
f1 = hgload('f1.fig'); %# load another figure
%# find data series objects
hstd = findobj(gcf,'type','line','-or','type','hggroup');
h1 = findobj(gcf,'type','line','-or','type','hggroup');
assert(numel(hstd)==numel(h1),'Figures have different number of data series')
%# get the data coordinates from one figure and apply to another
for k = 1:numel(hstd)
    h1x = get(h1(k),'XData');
    h1y = get(h1(k),'YData');
    h1z = get(h1(k),'ZData');
    set(hstd(k),'XData',h1x);
    set(hstd(k),'YData',h1y);
    set(hstd(k),'ZData',h1z);
end
hgsave(hstd,'f1mod.fig') %# save the modified figure
...