2013-07-16 111 views
4

是否有一種簡單的方法可以在繪圖軸上獲得自定義的比例縮放比例?matlab中的自定義軸比例尺

例如,半定量函數提供了{x,log10(y)}縮放,使得人們可以自動放大/ ot並且刻度和標籤自動調整。我想與{x,asinh(2 * y)}縮放比例相同。解決方案:

plot (x, asinh (2*y)); 
set (gca, 'YTickLabel', num2str (sinh (get (gca, 'YTick')(:))/2, '%g')) 

作品「靜態」的情節,但我想有蜱 - 標籤縮放時,其autoAdjust ...

+1

我相信你必須自己調整它並應用你的自定義刻度標記。 – MZimmerman6

回答

3

這裏是感興趣的功能。它會在您每次放大/縮小時縮放Y軸。 'sinh'轉換被使用,但它可能是任何轉換。

背後的matlab核心功能是'ActionPostCallback'。有關詳細信息,請參閱http://www.mathworks.fr/fr/help/matlab/ref/zoom.html。模擬功能「ActionPreCallback」也可以使用。這些小方便的功能也可用於主要功能'rotate3d','pan','zoom'和'brush'。

function applyCustomScalingWhenZooming 

%some data 
x=1:1/1000:100; 
y=1:1/1000:100; 

%figure 
figure; 
plot (x, asinh (2*y)); 
set (gca, 'YTickLabel', ... 
    num2str ((sinh (get (gca, 'YTick'))/2)(:), '%g')); %initial format 

%defines callback when zoom action 
h = zoom; %define handle for 'zoom' 
%action to be called right after zooming 
set(h,'ActionPostCallback', {@mypostcallback}); 


    function mypostcallback(obj,event_obj)  
    %format function  
    set (gca, 'YTickLabel', ...  
     num2str ((sinh (get (gca, 'YTick'))/2)(:), '%g')); 
+0

聽起來很不錯。我會盡快檢查出來。至於代碼,我忘記了轉置(在飛行中輸入了行=)),但是「sinh」實際上是正確的(通過縮放函數的倒數獲得原始尺度值) – Davide

+0

太好了 - 我刪除了註釋並將asinh/sinh改回原來的狀態。 – marsei