在一个图中显示多个.fig文件

时间:2016-06-24 10:56:05

标签: matlab

我正在尝试编写一个相对简单的函数,它允许我将任意数量的数字(以前保存为.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

2 个答案:

答案 0 :(得分: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)])

答案 1 :(得分: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