2013-04-26 48 views
2

我有一個2D繪圖,其上覆蓋了大量的數據元素。儘管所有的數據都是必要的,但我通常對情節的一小部分感興趣。 我想以編程方式將視圖集中在感興趣的元素上,同時允許使用縮放工具(GUI中的( - ))快速返回到更廣的視角。在不影響限制的情況下設置繪圖(座標軸)視圖「框」

它很容易使用set(gca, 'xlim', [limitsXOfSmallElement])set(gca, 'ylim', [limitsYOfSmallElement])來設置軸限制,以便小的元素聚焦,但這使得無法使用GUI( - )縮放工具返回到常規視圖而無需手動重置後軸限制爲原始值。

我的直覺是,這可以通過控制攝像頭屬性(CameraPositionCameraTarget和/或CameraViewAngle)來解決,但是當我應用它們,後使用GUI縮放工具的對軸怪異的效果,改變其位置和圖上的大小。

是否有一個很好的方法來設置顯示在軸上的2D畫布的片段?

+0

我猜想'zoom'和'pan'的正確組合對你有用嗎? – Dan 2013-04-26 14:50:40

+0

你可能是對的@Dan,但是當我開始在GUI中進行縮放時,奇怪的副作用確實使我不敢嘗試這種選擇。無論如何,如果我在將來嘗試並找到解決方案,我會在此處發佈以供參考。 – dunadar 2013-04-26 18:03:40

回答

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

+0

像魅力一樣工作。這是一種解決方法,但沒有消極的一面:D – dunadar 2013-04-26 18:00:02

相關問題