Maximiser automatiquement une figure

je crée des chiffres dans MATLAB et les enregistre automatiquement dans des fichiers. Le problème que, par définition, les images sont petites. Un bon moyen de résoudre mon problème à la main est de créer une image (figure), de la maximiser et de la sauvegarder dans un fichier.

je manque cette étape de maximiser automatiquement une figure.

des suggestions? Jusqu'à présent je n'ai trouvé que ceci:

http://answers.yahoo.com/question/index?qid=20071127135551AAR5JYh

http://www.mathworks.com/matlabcentral/newsreader/view_thread/238699

mais aucun ne résout mon problème.

34
demandé sur Dev-iL 2013-03-08 07:59:25

9 réponses

cela a fonctionné pour moi:

figure('units','normalized','outerposition',[0 0 1 1])

ou pour le chiffre actuel:

set(gcf,'units','normalized','outerposition',[0 0 1 1])

j'ai également utilisé la fonction MAXIMIZE sur L'échange de fichiers qui utilise java. C'est une véritable maximisation.

60
répondu yuk 2013-03-08 05:17:45

pour un Maximize réel (exactement comme cliquer le bouton maximize dans L'interface utilisateur de OS X et Windows) Vous pouvez essayer ce qui suit qui appelle une poignée Java cachée

figure;
pause(0.00001);
frame_h = get(handle(gcf),'JavaFrame');
set(frame_h,'Maximized',1);

le pause(n) est essentiel car le texte ci-dessus sort du scape Matlab et est situé sur un fil Java séparé. Réglez n à n'importe quelle valeur et vérifiez les résultats. Plus l'ordinateur est rapide au moment de l'exécution le plus petit n peut être.

La "documentation" complète peut être trouvée ici

21
répondu The-Duck 2014-02-03 23:27:06

pour maximiser la figure, vous pouvez imiter la séquence de touches que vous utiliseriez réellement:

  1. ALT - espace (tel qu'indiqué ici ) pour accéder au menu Fenêtre; et puis
  2. X pour maximiser (cela peut varier selon votre système).

pour envoyer les clés par programmation, vous pouvez utiliser une procédure basée sur Java semblable à cette réponse , comme suit:

h = figure;                                          %// create figure and get handle
plot(1:10);                                          %// do stuff with your figure
figure(h)                                            %// make it the current figure
robot = java.awt.Robot; 
robot.keyPress(java.awt.event.KeyEvent.VK_ALT);      %// send ALT
robot.keyPress(java.awt.event.KeyEvent.VK_SPACE);    %// send SPACE
robot.keyRelease(java.awt.event.KeyEvent.VK_SPACE);  %// release SPACE
robot.keyRelease(java.awt.event.KeyEvent.VK_ALT);    %// release ALT
robot.keyPress(java.awt.event.KeyEvent.VK_X);        %// send X
robot.keyRelease(java.awt.event.KeyEvent.VK_X);      %// release X

Voilà! Fenêtre maximisée!

6
répondu Luis Mendo 2017-05-23 11:54:44

comme il est proposé par un auteur au-dessus de , si vous voulez simuler en cliquant sur le bouton "maximize" windows, vous pouvez utiliser le code qui suit. La différence avec la réponse mentionnée est que l'utilisation de "drawnow" au lieu de "pause" semble plus correcte.

figure;
% do your job here
drawnow;
set(get(handle(gcf),'JavaFrame'),'Maximized',1);
4
répondu HomePlaneR 2017-05-23 12:10:09

de R2018a , figure ainsi que uifigure objets contiennent une propriété appelée WindowState . Il est réglé à 'normal' par défaut, mais le paramètre 'maximized' donne le résultat souhaité.

en conclusion:

hFig.WindowState = 'maximized'; % Requires R2018a

soit dit en passant, pour répondre à votre problème d'origine - si vous voulez exporter le contenu des figures aux images sans avoir à vous soucier des résultats étant trop petit - je voudrais je recommande fortement l'utilitaire export_fig .

4
répondu Dev-iL 2018-07-25 14:27:12

vous pouvez essayer ceci:

screen_size = get(0, 'ScreenSize');
f1 = figure(1);
set(f1, 'Position', [0 0 screen_size(3) screen_size(4) ] );
2
répondu ifryed 2015-01-14 11:53:50

C'est la forme la plus courte

figure('Position',get(0,'ScreenSize'))
0
répondu user48711 2015-01-14 11:17:31
%% maximizeFigure
%
% Maximizes the current figure or creates a new figure. maximizeFigure() simply maximizes the 
% current or a specific figure
% |h = maximizeFigure();| can be directly used instead of |h = figure();|
%
% *Examples*
%
% * |maximizeFigure(); % maximizes the current figure or creates a new figure|
% * |maximizeFigure('all'); % maximizes all opened figures|
% * |maximizeFigure(hf); % maximizes the figure with the handle hf|
% * |maximizeFigure('new', 'Name', 'My newly created figure', 'Color', [.3 .3 .3]);|
% * |hf = maximizeFigure(...); % returns the (i.e. new) figure handle as an output|
%
% *Acknowledgements*
% 
% * Big thanks goes out to Yair Altman from http://www.undocumentedmatlab.com/
%
% *See Also*
% 
% * |figure()|
% * |gcf()|
%
% *Authors*
%
% * Daniel Kellner, medPhoton GmbH, Salzburg, Austria, 2015-2017
%%

function varargout = maximizeFigure(varargin)

warning('off', 'MATLAB:HandleGraphics:ObsoletedProperty:JavaFrame')

% Check input variables
if isempty(varargin)
    hf = gcf; % use current figure
elseif strcmp(varargin{1}, 'new')
    hf = figure(varargin{2:end});
elseif strcmp(varargin{1}, 'all')
    hf = findobj('Type', 'figure');
elseif ~isa(varargin{1}, 'char') && ishandle(varargin{1}) &&...
        strcmp(get(varargin{1}, 'Type'), 'figure')
    hf = varargin{1};
else
    error('maximizeFigure:InvalidHandle', 'Failed to find a valid figure handle!')
end

for cHandle = 1:length(hf)   
    % Skip invalid handles and plotbrowser handles
    if ~ishandle(cHandle) || strcmp(get(hf, 'WindowStyle'), 'docked') 
        continue
    end

    % Carry the current resize property and set (temporarily) to 'on'
    oldResizeStatus = get(hf(cHandle), 'Resize');
    set(hf(cHandle), 'Resize', 'on');

    % Usage of the undocumented 'JavaFrame' property as described at:
    % http://undocumentedmatlab.com/blog/minimize-maximize-figure-window/
    jFrame = get(handle(hf(cHandle)), 'JavaFrame');

    % Due to an Event Dispatch thread, the pause is neccessary as described at:
    % http://undocumentedmatlab.com/blog/matlab-and-the-event-dispatch-thread-edt/
    pause(0.05) 

    % Don't maximize if the window is docked (e.g. for plottools)
    if strcmp(get(cHandle, 'WindowStyle'), 'docked')
        continue
    end

    % Don't maximize if the figure is already maximized
    if jFrame.isMaximized
        continue
    end

    % Unfortunately, if it is invisible, it can't be maximized with the java framework, because a
    % null pointer exception is raised (java.lang.NullPointerException). Instead, we maximize it the
    % straight way so that we do not end up in small sized plot exports.
    if strcmp(get(hf, 'Visible'), 'off')
        set(hf, 'Units', 'normalized', 'OuterPosition', [0 0 1 1])
        continue
    end

    jFrame.setMaximized(true);

    % If 'Resize' will be reactivated, MATLAB moves the figure slightly over the screen borders. 
    if strcmp(oldResizeStatus, 'off')
        pause(0.05)
        set(hf, 'Resize', oldResizeStatus)
    end
end

if nargout
    varargout{1} = hf;
end
0
répondu braggPeaks 2017-08-31 13:26:20