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