4

有没有一种简单的方法可以在绘图轴上获得自定义缩放?

例如,semilogy 函数提供 {x, log10(y)} 缩放,以便可以自动放大/放大和自动调整刻度和标签。我想用 {x, asinh(2*y)} 缩放来做同样的事情。解决方案:

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

适用于“静态”图,但我希望有刻度 - 标签在缩放时自动调整......

4

1 回答 1

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'));  
于 2013-07-16T14:20:29.803 回答