【问题标题】:Open an axes into a separate figure in MATLAB在 MATLAB 中将轴打开到单独的图形中
【发布时间】:2014-12-15 11:57:48
【问题描述】:

我创建了一个包含多个坐标轴的图形用户界面。我想添加一个按钮,在单独的图中打开这些图,以便我可以进行一些操作,例如更改标题并保存它。轴不必随图形更新。

换句话说,如何将 GUI 的轴导出到图形(单独的窗口)?

这是我应该打开新图形的按钮回调

function btn_open_force_sandheight_Callback(hObject, eventdata, handles)

axes(handles.force_sandheight); % This axes already contains the plots

为了清楚起见,图已经存在于坐标区中。我需要在单独的图中打开它。

【问题讨论】:

    标签: matlab user-interface matlab-guide


    【解决方案1】:

    copyobj():

    # Make a dummy "GUI"
    h.fig1 = figure;
    h.ax1 = axes('Parent', h.fig1);
    plot(1:10);
    
    # Spawn new figure window and copy axes object from the GUI
    h.fig2 = figure;
    h.ax2 = copyobj(h.ax1, h.fig2);
    

    【讨论】:

    • 你能解释一下你在做什么吗?我不太明白。我的轴被称为handles.plot1 并在按钮的函数回调中访问
    • @Ortix92 从文档中,copyobj 的两个输入是您要复制的对象、您的坐标区和新的父对象,即一个新的图形窗口。修改句柄名称以匹配您在函数中的名称。
    • @Ortix92 所有axes 调用在您的编辑中所做的是将CurrentAxes 更改为handles.force_sandheight 并使窗口成为焦点,没有任何内容被复制。如果您想打开一个新窗口,您需要使用figure,然后您可以将您的坐标区对象复制到其中,类似于我在示例中所做的。
    • 嗯,很奇怪,因为我按照你说的做了,但我得到了一个空的数字。plots = getappdata(0,'plots'); h.fig2 = figure; h.ax2 = copyobj(plots, h.fig2);
    • @Ortix92 我不是这么说的。我说使用您现有的轴手柄handles.force_sandheightplots 是什么?
    【解决方案2】:

    这很简单!只需将坐标轴的属性'Parent' 更改为新图形即可。

    例子:

    fh1 = figure('Name','1');
    plot( rand(10) ); 
    ah = gca; %// get handle to current axes in figure 1
    

    现在我们创建第二个图形并将绘图移到它上面

    fh2 = figure('Name','2');
    set( ah, 'Parent', fh2 ); %// that's it!
    

    【讨论】:

    • 这不起作用。轴位于 GUI 中。我不想改变父母。我想要一个新图形中的那个轴的副本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    相关资源
    最近更新 更多