Matlab将个别子图保存为jpg

时间:2013-09-30 02:38:10

标签: matlab plot subplot handles save-as

for循环中,我创建了一个可变数量的子图,这些子图显示在一个图上。我还可以将每个子图保存为单独的全尺寸图和图像文件(最好是JPG)吗?

2 个答案:

答案 0 :(得分:2)

将copyobj用于新图形,然后将saveas与新图形句柄一起使用:

您应该提供的示例代码(请参阅SSCCE):

figure
nLines = 2;
nColumns = 3;
handles = zeros(nLines,nColumns)
for line = 1:nLines
  for column = 1:nColumns
    handles(line,column)=subplot(nLines,nColumns,column+(line-1)*nColumns);
    plot([line column]);
    title(sprintf('Cool title (%d,%d)',line,column))
    ylabel(sprintf('Ylabel yeah (%d,%d)',line,column))
    xlabel(sprintf('Xlabel nah (%d,%d)',line,column))
  end
end

这里我保存了子图句柄,但假设你没有保存它们:

axesH = findobj(gcf,'Type','axes','-not','Tag','legend'); % This will change the order from which the axes will be saved. If you need to save in the correct order, you will need access to the subplot handles
nAxes = numel(axesH)
newFig = figure;
for k=1:nAxes
   newAxes=copyobj(axesH(k),newFig);
   % Expand subplot to occupy the hole figure:
   set(newAxes,'OuterPosition',[0 0 1 1]);
   tightInset=get(newAxes,'TightInset');
   set(newAxes,'Position',[tightInset(1:2) [1 1]-(tightInset(3:4)+tightInset(1:2))])
   saveas(newFig,sprintf('axes_%d.jpg',k),'jpg');
   delete(newAxes);
end
delete(newFig);

保存一个轴的示例:

One subplot example

要删除死区,我使用了可用的信息on this topic

答案 1 :(得分:1)

假设您拥有subfigureha的句柄,您可以使用getframeframe2im,如下所示,

F = getframe(ha);
[im,map] = frame2im(F);
if isempty(map)
    imwrite(im,'subframe.jpg');
else
    imwrite(im,map,'subframe.jpg');
end

请注意,这会将轴完全保存在屏幕上,因此请在保存之前根据自己的喜好调整图形大小。要尽可能多地使用数字空间,请在MATLAB Central上试用subfigure_tight函数。