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 に答える