2014-05-17 4 views
2

Вот список команд, которые я сделал, чтобы попытаться поместить внешнюю фигуру (обе цифры указаны в http://www.atmos.uw.edu/~akchen0/CERES_Project/) в слот subplot на открытой фигуре.Как использовать subplot для построения графика из импортированного файла .fig (при сохранении легенды + оси + метки)?

subplot(2,2,1); 
a = open('blah.fig'); 
plot(a); 

Я хотел blah.fig быть сюжетными 1, но я только получаю сообщение об ошибке при попытке «сюжет» а.

Пробовал перечисленное решение из ответа, но он не распечатывал ни одну из надписей/легенд (а некоторые из графиков отсутствуют) - результаты примерно показаны ниже.

copyobj(findobj('type','line'),s1) 

Позволяет мне скопировать все линии в порядке (хотя они немного искажены). Если я хочу, чтобы попытаться скопировать легенду с

copyobj(findobj(gcf1,'Type','axes','Tag','legend'),s1) 

Это не работает, и отображает сообщение об ошибке «Объект осей 1 не может быть ребенком родителя осей 1». Если я использую ax1, он отображает «недействительный дескриптор». То же самое для следующей команды:

copyobj(findobj('type','axes'),s1) 

http://puu.sh/8S50L.png

Некоторые ссылки я пытался, но не получилось: http://www.mathworks.com/matlabcentral/answers/92538-how-can-i-copy-an-existing-figure-onto-another-figure-as-a-subplot-using-matlab-7-10-r2010a

Или это: http://www.mathworks.com/matlabcentral/newsreader/view_thread/108304

>> figure_children = get(gcf1,'Children'); 
children_axes = findall(figure_children,'Type','axes'); 
>> copyobj(children_axes,s1) 
Error using copyobj 
Object axes[1] can not be a child of parent axes[1] 

allchild не работает либо ,

>> copyobj(allchild(h1),s1) 
Error using copyobj 
Object uicontextmenu[1] can not be a child of parent axes[1] 

Второй ответ here работает на собственном примере, но не для моего примера.

ответ

3

Чтобы скопировать файлы MATLAB (.fig), выполните следующие действия.

  1. Сначала откройте их с openfig и использовать reuse флаг. Это гарантирует, что вы не перезагружаете цифры, если они уже открыты.
  2. Убедитесь, что вы получаете текущие оси для всех этих загруженных фигур.
  3. Сделайте новую фигуру, затем получите ручку для каждого нужного слота subplot.
  4. Захватите все дочерние элементы от ручек до осей каждой фигуры, загруженной из файла.
  5. Используйте copyobj, чтобы скопировать фигуры с помощью элементов children из шага 4 в каждый слот subplot с использованием ручек subplot.

Другими словами, посмотрите на этот пример:

% /// Step #1 and #2 
h1 = openfig('test1.fig','reuse'); %// open figure from file 
ax1 = gca; % // get handle to axes of figure 

h2 = openfig('test2.fig','reuse'); %// open another figure from file 
ax2 = gca; % // get handle to axes of the other figure 

%// test1.fig and test2.fig are the names of the figure files which you would 
%// like to copy into multiple subplots 

% /// Step #3 
h3 = figure; %// create new figure 
s1 = subplot(2,1,1); % // create and get handle to the subplot axes 
s2 = subplot(2,1,2); 

% /// Step #4 
fig1 = get(ax1,'children'); %// get handle to all the children in the figure 
fig2 = get(ax2,'children'); 

% /// Step #5 
copyobj(fig1,s1); %// copy children to new parent axes i.e. the subplot axes 
copyobj(fig2,s2); 
+0

Wow - спасибо! Я просто пробовал это, но он не очень хорошо работал (снимок экрана здесь: http://puu.sh/8Qz1l.png) Название не сохраняется, и многие из них не являются многочисленными. – InquilineKea

+1

@InquilineKea: Ahhh ...нормально, если есть легенды и ярлыки ... тогда мне нужно изменить свое решение. Тебе придется немного дать мне. Кстати, ваш скриншот запутан. На какой график я должен смотреть? Можете ли вы предоставить свой файл .fig, чтобы я мог сам попытаться воспроизвести проблему? Я использую R2014a, поэтому я уверен, что смогу загрузить его. – rayryeng

+0

Хорошо. Мои файлы находятся здесь: http://www.atmos.uw.edu/~akchen0/CERES_Project/ – InquilineKea

Смежные вопросы