Clear Filters
Clear Filters

Is there a way to add a button to a figure such that the next figure is displayed?

17 views (last 30 days)
Dear reader,
For my work I often have to look at multiple figures I've plotted (in my case using imagesc(), but my questions is basically for all figures created). I have to compare the figures to each other, to find subtle differences. These are sometimes so subtle that a ctrl+tab command 'ruins' my concentration. I was wondering whether there's a button that I could add to the GUI of a figure that will open the next button.
Imagin you create two figures. The experience I'm looking for is the same that you'd have when closing one figure using the X button on the top right (using a Windows computer), so that you immediately see the next figure. But rather than closing the current figure, I just want it to move to the next (or previous?) one.
Kind regards,
Ariwan
  1 Comment
Ariwan Abdollah
Ariwan Abdollah on 14 Nov 2020
Edited: Ariwan Abdollah on 20 Nov 2020
For any future reader, I added a 'b', that brings you to the previous figure. Also when some figures are closed, it nicely jumps to the next figure (so if you close figure 3, it will go from figure 2 to figure 4).
This script below is to see the effect. If you want to use it in your own script, use figure('keyPressFcn', @keyPressFcn) in your script when plotting or imaging something, create a file called keyPressFcn.m from with the script below, and comment out all the figures created below (so f1 - f6)
cheers!
f1 = figure('keyPressFcn', @keyPressFcn);
f2 = figure('keyPressFcn', @keyPressFcn);
f3 = figure('keyPressFcn', @keyPressFcn);
f4 = figure('keyPressFcn', @keyPressFcn);
f5 = figure('keyPressFcn', @keyPressFcn);
f6 = figure('keyPressFcn', @keyPressFcn);
function N(obj,eve)
if eve.Character == 'n'
h = findobj('type','figure');
A=zeros(1,length(h));
for i = 1:length(h)
A(i) = h(i).Number;
end
A=sort(A);
ix = find(A==obj.Number);
if ix == length(A)
n = A(1);
else
n = A(ix+1);
end
figure(n);
end
if eve.Character == 'b'
h = findobj('type','figure');
A=zeros(1,length(h));
for i = 1:length(h)
A(i) = h(i).Number;
end
A=sort(A);
ix = find(A==obj.Number);
if ix == 1
n = A(end);
else
n = A(ix-1);
end
figure(n);
end
end

Sign in to comment.

Accepted Answer

Ameer Hamza
Ameer Hamza on 12 Nov 2020
Here is a simple example. It creates 3 figures, and if you press 'n' key while focused on any window, it will open the next window
f1 = figure('KeyPressFcn', @keyPressFcn);
f2 = figure('KeyPressFcn', @keyPressFcn);
f3 = figure('KeyPressFcn', @keyPressFcn);
function keyPressFcn(obj, eve)
if eve.Character == 'n'
n = rem(obj.Number,3)+1;
figure(n);
end
end

More Answers (0)

Categories

Find more on Specifying Target for Graphics Output in Help Center and File Exchange

Products


Release

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!