如何使用子图来绘制导入的.fig文件中的所有内容(同时保留图例+轴+标签)?

时间:2014-05-17 23:37:44

标签: matlab plot

以下是我尝试将外部图形(http://www.atmos.uw.edu/~akchen0/CERES_Project/列出的两个图形)放入开放图形中的subplot插槽中的命令列表。

subplot(2,2,1);
a = open('blah.fig');
plot(a);

我希望blah.fig成为子集1,但是当我尝试"绘制"时,我只收到错误消息。一个。

从答案中尝试了列出的解决方案,但它没有打印出任何标签/图例(并且缺少一些图表) - 结果大致如下所示。

copyobj(findobj('type','line'),s1)

允许我复制所有细线(尽管它们有点失真)。如果我想尝试用

复制图例
copyobj(findobj(gcf1,'Type','axes','Tag','legend'),s1)

它不起作用,并显示错误消息"对象轴1不能是父轴1"的子节点。如果我使用ax1,它会显示"无效的句柄"。对于以下命令也是如此:

copyobj(findobj('type','axes'),s1)

http://puu.sh/8S50L.png

我试过的一些链接但是没有用到: http://www.mathworks.com/matlabcentral/answers/92538-how-can-i-copy-an-existing-figure-onto-another-figure-as-a-subplot-using-matlab-7-10-r2010a

或者:http://www.mathworks.com/matlabcentral/newsreader/view_thread/108304

>> figure_children = get(gcf1,'Children');
children_axes = findall(figure_children,'Type','axes');
>> copyobj(children_axes,s1)
Error using copyobj
Object axes[1] can not be a child of parent axes[1]

allchild也不起作用。

>> copyobj(allchild(h1),s1)
Error using copyobj
Object uicontextmenu[1] can not be a child of parent axes[1]

第二个回复here适用于自己的示例,但不适用于我的示例。

1 个答案:

答案 0 :(得分:3)

为了复制MATLAB图形(.fig)文件,以下是您需要遵循的步骤。

  1. 首先使用openfig打开它们并使用reuse标记。这样可以确保您在已经打开的情况下不会重新加载数据。
  2. 确保获取所有这些加载数字的当前轴。
  3. 创建一个新数字,然后获取所需的每个subplot插槽的句柄。
  4. 将句柄中的所有子元素从文件中加载到每个图形的轴中。
  5. 使用copyobj使用subplot句柄,使用步骤#4中的子元素将数字复制到每个subplot插槽中。
  6. 换句话说,请看一下这个例子:

    % /// Step #1 and #2
    h1 = openfig('test1.fig','reuse'); %// open figure from file
    ax1 = gca; % // get handle to axes of figure
    
    h2 = openfig('test2.fig','reuse'); %// open another figure from file
    ax2 = gca; % // get handle to axes of the other figure
    
    %// test1.fig and test2.fig are the names of the figure files which you would 
    %// like to copy into multiple subplots
    
    % /// Step #3
    h3 = figure; %// create new figure
    s1 = subplot(2,1,1); % // create and get handle to the subplot axes
    s2 = subplot(2,1,2);
    
    % /// Step #4
    fig1 = get(ax1,'children'); %// get handle to all the children in the figure
    fig2 = get(ax2,'children');
    
    % /// Step #5
    copyobj(fig1,s1); %// copy children to new parent axes i.e. the subplot axes
    copyobj(fig2,s2);