设置绘图(轴)视图“框”而不影响限制

时间:2013-04-26 14:36:34

标签: matlab matlab-figure

我有一个2D图,其上有许多数据元素,覆盖了广泛的区域。虽然所有数据都是必要的,但我通常对该情节的一小部分感兴趣。 我想以编程方式将视图集中在感兴趣的元素上,同时允许使用缩放工具(GUI中的( - ))快速回到更广阔的视角。

很容易使用set(gca, 'xlim', [limitsXOfSmallElement])set(gca, 'ylim', [limitsYOfSmallElement])来设置轴限制,以便小元素处于焦点,但这使得无法使用GUI( - )缩放工具返回到一般视图,无需手动将后轴限制重置为原始值。

我的直觉是,这可以通过控制相机属性(CameraPositionCameraTarget和/或CameraViewAngle)来解决,但是当我应用它们时,后续使用GUI缩放工具在轴上产生奇怪的效果,如在图上改变它的位置和大小。

是否有一种很好的方法来设置轴画面中显示的2D画布片段?

1 个答案:

答案 0 :(得分:1)

考虑以下示例:

function example_zoom
    %# some plot
    plot(1:10)
    hAx = gca;

    %# save original axis limits
    setappdata(hAx, 'limits',get(gca,{'XLim','YLim'}))

    %# create custom toolbar button
    [X,map] = imread(fullfile(toolboxdir('matlab'),'icons','view_zoom_out.gif'));
    icon = ind2rgb(X,map);
    uipushtool('CData',icon, 'ClickedCallback',{@click_cb,hAx});

    %# zoom
    uiwait(msgbox('Zooming now, click button to reset', 'modal'))
    set(gca, 'XLim',[3 7], 'YLim',[2 9])
    %zoom on
end

function click_cb(o,e, hAx)
    %# restore original axis limits
    limits = getappdata(hAx, 'limits');
    set(hAx, 'XLim',limits{1}, 'YLim',limits{2})
end

我们的想法是创建您自己的toolbar button,将轴限制恢复为原始值。

plot