2012-02-08 4 views
2

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

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

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

Благодаря

ответ

1

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

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

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

Если ваша фигура разбросана, тип объекта является либо строкой (если вы используете график), либо hggroup (если вы используете разброс). Поэтому он является примером того, как это можно сделать.

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 
1

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

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