2016-06-24 5 views
0

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

Я искал решение на веб-сайте, но оно не работает для меня. Более того, я почти там с моим кодом, так как выходы почти то, что я хочу: действительно, я получаю две фигуры в правильном положении, но в двух отдельных окнах и в третьем окне, которое правильно объединяет два входа, но они выглядите странно, с более низким разрешением! Таким образом, я получаю три результата.

Вот мой код, надеюсь, вы можете мне помочь. (Попробуйте со своими файлами .fig и проверьте, есть ли у вас три неправильных выхода, например я).

function SubPlotFig (varargin) 

for i = 1:nargin 
hf = hgload(varargin{i}); 
ax(i) = findobj(hf,'Type','axes'); 
end 

hc = figure; 
for i = 1:nargin 
subplot(1,2,i,ax(i)); 
copyobj(ax(i),hc); 
end 

Attachment_1 Attachment_2

ответ

0

Проблема была в цветовой палитре. Теперь он решен. Вот правильный код, может быть полезным для других :)

function SubPlotFig (varargin) 

for i = 1:nargin 
hf = openfig(varargin{i},'reuse'); 
cm = colormap; 
c(i) = findobj(hf,'Type','Colorbar'); 
ax(i) = findobj(hf,'Type','Axes'); 
end 

hc = figure; 
for i = 1:nargin 
subplot(1,2,i,ax(i)); 
copyobj(ax(i),hc); 
colormap(ax(i),cm); 
copyobj([c(i),ax(i)],hc); 
end 
0

При вызове hgload, он будет открывать фигуру из .fig файла и отобразить его. Вы делаете это внутри своего первого цикла, так что вы увидите цифру для каждого из входов. Показатель, который вы видите, равен точно, что вы сохранили для каждой фигуры.

for i = 1:nargin 
    hf = hgload(varargin{i});   % <---- Creates a figure 
    ax(i) = findobj(hf,'Type','axes'); 
end 

Во втором цикле, вы создаете subplot для каждого из axes в цифры, которые вы только что открыли. Разумеется, они будут меньше, потому что теперь вы устанавливаете несколько axes в размере figure, который является размером по умолчанию. Они на самом деле не «низкое разрешение», а меньше на экране. Если вы хотите увеличить их размер, вам нужно увеличить размер фигуры.

% Create all of the subplots 
hc = figure; 
for i = 1:nargin 
    hax = subplot(1,2,i,ax(i)); 
    copyobj(ax(i),hc); 
    colorbar(hax); 
end 

% Make sure we are using the jet colormap 
colormap(jet) 

% Get the current figure position 
pos = get(hc, 'Position'); 

% Double the width since you now have two plots 
set(hc, 'Position', [pos(1:2) pos(3)*2, pos(4)]) 
+0

Thank you Suever! Проблема, к сожалению, сохраняется: цифры теперь больше, но по-прежнему отличаются от оригинальных! Я добавил два вложения, чтобы уточнить это :) – Angela

+0

@Angy Итак, каковы различия, которые вас волнуют? Цветовая палитра? Соотношение сторон графика? Отсутствие цветных панелей? Вы никогда не сможете произвести их точно так же. Если вы хотите, чтобы они выглядели одинаково, вам лучше сохранить каждую фигуру в качестве изображения, а затем объединить их в другую программу. – Suever

+0

Я думаю, что проблема в colorbar, copyobj не копирует ее на новый рисунок. В Attachment_1 результат точно так же, как и оригинальный (хороший!), Но есть только одна фигура, другая отсутствует. В Attachment_2 у вас есть оба из них (хорошо!), Но они отличаются от исходных (colormap?) – Angela

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