How do I make both yyaxis axes zoom together?
Ältere Kommentare anzeigen
When I plot two figures using "yyaxis" and use the interactive zoom, only the right (active) axis zooms. The other one does not get updated. How can I fix this?
Akzeptierte Antwort
Weitere Antworten (2)
Julian Hapke
am 11 Aug. 2023
1 Stimme
Here's a function that does not rely on an activated zoom tool and also works for panning
function yysync(ax)
%YYSYNC links left and right yyaxis, so they pan and zoom synchronously
%
% unfortunately the PostSet event is also triggered when ylim() is called
% so if you want to set axis limits independently, you have to to so before
% calling yysync
%
% Syntax:
% yysync(ax)
%
% Inputs:
% ax:
% the axes whose yyaxis shall be linked
% graphics handle
% required
%
% Outputs:
% -
%
% Examples:
% -
%
% See also: yyaxis, ylim
%
rulers = ax.YAxis;
if numel(rulers) == 1
% no second y axis
return
end
factor = diff(rulers(2).Limits) / diff(rulers(1).Limits);
offset = rulers(2).Limits(1) - factor * rulers(1).Limits(1);
function setOtherLimits(~, event)
obj = event.AffectedObject;
if obj.YAxisLocation == "right"
obj.YAxis(1).Limits = (obj.YLim - offset) / factor;
else
obj.YAxis(2).Limits = factor .* obj.YLim + offset;
end
end
addlistener(ax, 'YLim', 'PostSet', @setOtherLimits);
end
Andres
am 6 Dez. 2021
Bearbeitet: MathWorks Support Team
am 10 Jun. 2022
0 Stimmen
I have uploaded a solution (yyzoom) to the File Exchange,
that stores the base values for the axes limits relation inside the callback function of a listener to the YLim property of the yyaxis chart axes. I've had the opportunity to test it with R2021a/b up to now.
Kategorien
Mehr zu Data Exploration finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!