我有一个2D图,其上有许多数据元素,覆盖了广泛的区域。虽然所有数据都是必要的,但我通常对该情节的一小部分感兴趣。 我想以编程方式将视图集中在感兴趣的元素上,同时允许使用缩放工具(GUI中的( - ))快速回到更广阔的视角。
很容易使用set(gca, 'xlim', [limitsXOfSmallElement])
和set(gca, 'ylim', [limitsYOfSmallElement])
来设置轴限制,以便小元素处于焦点,但这使得无法使用GUI( - )缩放工具返回到一般视图,无需手动将后轴限制重置为原始值。
我的直觉是,这可以通过控制相机属性(CameraPosition
,CameraTarget
和/或CameraViewAngle
)来解决,但是当我应用它们时,后续使用GUI缩放工具在轴上产生奇怪的效果,如在图上改变它的位置和大小。
是否有一种很好的方法来设置轴画面中显示的2D画布片段?
答案 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,将轴限制恢复为原始值。