2016-06-24 19 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 

在第二循環中,您將爲每個axessubplot,你剛剛打開的數額之內。這些當然會更小,因爲您現在將多個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

謝謝Suever!不幸的是,問題仍然存在:數字現在變大了,但仍然與原來的不同!我已經添加了兩個附件來澄清它:) – Angela

+0

@Angy那麼你關心的區別是什麼?色彩地圖?情節的縱橫比?缺少顏色條?你永遠無法用這種方式來製作它們。如果您希望它們看起來完全相同,則最好將每個圖形保存爲圖像,然後將這些圖像合併到另一個程序中。 – Suever

+0

我認爲問題是colorbar,copyobj不會將它複製到新圖中。在Attachment_1中,結果與原始結果完全相同(好!),但只有一個數字,另一個數字不見了。在Attachment_2中你有兩個(好!),但它們看起來不同於原始的(colormap?) – Angela

相關問題