Resizing GUI Plots (Copied Into New Figure Window)

3 vues (au cours des 30 derniers jours)
Matt
Matt le 21 Oct 2016
Modifié(e) : Matt le 15 Fév 2017
Hi,
I have a program with a results GUI window that allows the user to plot 6 different variables on each of three different graphs.
These are quite small to fit on the GUI. I want them to appear like a 1x3 column subplot, in a new full sized figure window when a button is pressed.
I have copied the plots (I don't want to re-plot them based on the users radio button choices - too many combinations possible) and put them in a new figure window.
They are shown in the new figure window the same size as the GUI version though... how can I make these fit the figure window?
Code so far:
set(0,'showhiddenhandles','on') % Make the GUI figure handle visible
AxesInGUI = findobj(gcf,'type','axes') % Find the axes object in the GUI
% Open a new figure with handle NewFig
scrsz = get(0,'ScreenSize');
NewFig = figure('Position',[0 0 scrsz(3) scrsz(4)],'Color',[0.95 0.95 0.95])
% Copy axes object AxesInGUI into figure NewFig
CopiedObjects = copyobj(AxesInGUI,NewFig)
Thanks in advance, Matt.
  1 commentaire
Adam
Adam le 21 Oct 2016
Can't you just resize the axes by changing the 'Position' property?

Connectez-vous pour commenter.

Réponse acceptée

Matt
Matt le 24 Oct 2016
I have figured this out. Solution below for anyone who needs to do this in the future...
  • I copy the plots the user has selected to plot (using the many radio buttons) on the GUI using findobj. This puts them in a 3x1 Axes Array.
  • Then I make a new figure window.
  • Next I copy the plots found using findobj by using copyobj, into the new figure window. This puts them in a new 3x1 Axes Array.
  • I hadn't understood how this all worked, but once I did I realised I could manipulate each plot stored in the new 3x1 Axes Array individually then it was possible to space them out correctly (again - as they were on the GUI) but make them larger.
set(CopiedObjects(1,1), 'Position', [15 4 360 18]);
set(CopiedObjects(2,1), 'Position', [15 28.5 360 18]);
set(CopiedObjects(3,1), 'Position', [15 53 360 18]);
This places each plot in a line vertically (15 units from the left border) and then spaces them out on the screen (4/28.5/53 units up from the lower border) keeping them all 360x18 in size.
I hope this helps someone one day - it had me stumped for ages.
Thanks for the suggestion Adam. I had tried that with no success but I have got it sussed now.

Plus de réponses (0)

Catégories

En savoir plus sur Graphics Object Programming dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by