two new matlab export matlab-figure programmatically maximize-window

new - title figure matlab



Maximizar automáticamente una figura (9)

Estoy creando algunas figuras en MATLAB y las guardo automáticamente en archivos. El problema es que, por definición, las imágenes son pequeñas. Una buena forma de resolver mi problema a mano es crear una imagen (figura), maximizarla y guardarla en un archivo.

Me falta este paso de maximizar automáticamente una figura.

¿Alguna sugerencia? Hasta ahora solo encontré esto:

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

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

pero ninguno está resolviendo mi problema.


Esta es la forma más corta

figure(''Position'',get(0,''ScreenSize''))


Esto funcionó para mí:

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

o para la figura actual:

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

También utilicé la función MAXIMIZE en FileExchange que usa Java. Esta es la verdadera maximización.


La maximización de la ventana de figuras no es la mejor manera de guardar una figura como una imagen con mayor resolución.

Hay propiedades de figura para imprimir y guardar . Usando estas propiedades puedes guardar archivos en cualquier resolución que desees. Para guardar los archivos, debe usar la función de impresión , ya que puede establecer un valor de dpi . Entonces, primero establezca las siguientes propiedades de figura:

set(FigureHandle, ... ''PaperPositionMode'', ''manual'', ... ''PaperUnits'', ''inches'', ... ''PaperPosition'', [0 0 Width Height])

y segundo, guarde el archivo (por ejemplo) como png con 100dpi ( ''-r100'' )

print(FigureHandle, Filename, ''-dpng'', ''-r100'');

Para obtener un archivo con 2048x1536px configure Width = 2048/100 y Altura 1536/100 , /100 porque lo guarda con 100dpi. Si cambia el valor de ppp, también debe cambiar el divisor al mismo valor.

Como puede ver, no hay necesidad de ninguna función adicional desde el intercambio de archivos o el procedimiento basado en Java. Además, puede elegir cualquier resolución deseada.


Para maximizar la figura, puede imitar la secuencia de teclas que realmente usaría:

  1. ALT - SPACE (como se indica here ) para acceder al menú de la ventana; y entonces
  2. X para maximizar (esto puede variar en su sistema).

Para enviar las claves mediante programación, puede utilizar un procedimiento basado en Java similar a esta respuesta , de la siguiente manera:

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à! Ventana maximizada!


Para un Maximize real (exactamente como hacer clic en el botón maximizar en la interfaz de usuario de OS X y Windows) Puede intentar lo siguiente que llama a un identificador Java oculto

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

La pause(n) es esencial ya que lo anterior sale del Matlab scape y está situado en un subproceso Java separado. Establezca n en cualquier valor y verifique los resultados. Cuanto más rápida sea la computadora en el momento de la ejecución, más pequeña puede ser n .

La "documentación" completa se puede encontrar here


puedes probar esto:

screen_size = get(0, ''ScreenSize''); f1 = figure(1); set(f1, ''Position'', [0 0 screen_size(3) screen_size(4) ] );


A partir de R2018a , los objetos uifigure y uifigure contienen una propiedad llamada WindowState . Esto se establece en ''normal'' de forma predeterminada, pero al establecerlo en ''maximized'' obtiene el resultado deseado.

En conclusión:

hFig.WindowState = ''maximized''; % Requires R2018a

Por cierto, para solucionar su problema original, si desea exportar el contenido de las figuras a las imágenes sin tener que preocuparse de que los resultados sean demasiado pequeños, recomiendo encarecidamente la utilidad export_fig .


Tal como lo propone un autor anterior , si desea simular haciendo clic en el botón "maximizar" de Windows, puede usar el código siguiente. La diferencia con la respuesta mencionada es que usar "drawow" en lugar de "pausa" parece más correcto.

figure; % do your job here drawnow; set(get(handle(gcf),''JavaFrame''),''Maximized'',1);


%% 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