37

我正在 MATLAB 中创建一些图形并自动将它们保存到文件中。根据定义,图像很小的问题。手动解决我的问题的一个好方法是创建一个图像(图),将其最大化,然后保存到一个文件中。

我错过了自动最大化图形的这一步。

有什么建议么?到目前为止,我只发现了这个:

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

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

但没有人能解决我的问题。

4

10 回答 10

61

这对我有用:

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

或当前数字:

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

我还在使用 java 的 FileExchange 上使用了MAXIMIZE函数。这是真正的最大化。

于 2013-03-08T05:12:40.857 回答
24

对于实际的最大化(就像在 OS X 和 Windows 的 UI 中单击最大化按钮一样)您可以尝试以下调用隐藏的 Java 句柄

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

pause(n)是必不可少的,因为上述内容超出了 Matlab 的范围,并且位于单独的 Java 线程上。设置n为任何值并检查结果。计算机在执行时越快,n可以越小。

完整的“文档”可以在这里找到

于 2014-01-24T22:28:24.793 回答
13

从 R2018a 开始,对象figureuifigure包含一个名为WindowState. 默认情况下设置为'normal',但将其设置为可'maximized'提供所需的结果。

综上所述:

hFig.WindowState = 'maximized'; % Requires R2018a

此外,正如Unknown123的评论中提到的:

  1. 可以使用以下方法使图形默认最大化:

    set(groot, 'defaultFigureWindowState', 'maximized');
    
  2. 使用以下方法可以最大化所有打开的图形:

    set(get(groot, 'Children'), 'WindowState', 'maximized');
    
  3. 可以在此文档页面中找到有关控制图形外观的更多信息'WindowState'以及其他属性。

最后,为了解决您最初的问题 - 如果您想将图形的内容导出到图像而不必担心结果太小 - 我强烈推荐该export_fig实用程序。

于 2018-07-25T14:19:04.427 回答
6

为了最大化这个数字,你可以模仿你实际使用的键序列:

  1. ALT- (如此SPACE所示)访问窗口菜单;进而
  2. X最大化(这在您的系统中可能会有所不同)。

要以编程方式发送密钥,您可以使用类似于此答案的基于 Java 的过程,如下所示:

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

瞧!窗口最大化!

于 2015-07-07T23:19:48.537 回答
4

正如上面一位作者提出的,如果你想模拟点击“最大化”窗口按钮,可以使用下面的代码。与提到的答案不同的是,使用“drawnow”而不是“pause”似乎更正确。

figure;
% do your job here
drawnow;
set(get(handle(gcf),'JavaFrame'),'Maximized',1);
于 2015-06-08T08:49:37.027 回答
4

恕我直言,最大化图形窗口并不是将图形保存为更高分辨率图像的最佳方法。

有用于打印和保存的图形属性。使用这些属性,您可以以所需的任何分辨率保存文件。要保存文件,您必须使用打印功能,因为您可以设置一个dpi值。所以,首先设置下图属性:

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

然后将文件(例如)保存为 100dpi ( '-r100')的 png

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

获取带有2048x1536pxsetWidth = 2048/100和 Height的文件1536/100/100因为您使用 100dpi 保存。如果您更改 dpi 值,您还必须将除数更改为相同的值。

如您所见,文件交换或基于 java 的过程不需要任何额外的功能。此外,您可以选择任何所需的分辨率。

于 2016-03-11T09:51:22.297 回答
2

你可以试试这个:

screen_size = get(0, 'ScreenSize');
f1 = figure(1);
set(f1, 'Position', [0 0 screen_size(3) screen_size(4) ] );
于 2013-12-24T09:25:00.037 回答
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
于 2017-08-31T12:04:16.627 回答
0

这是最短的形式

figure('Position',get(0,'ScreenSize'))
于 2015-01-14T11:17:31.880 回答
0

我建议set更改图形的命令MenuBarToolbar属性。该set命令更加通用,因为它适用于较旧和较新版本的 Matlab。

fig = figure(1);
set(fig, 'MenuBar', 'none');
set(fig, 'ToolBar', 'none');

现在您可以set再次使用来使您的图形全屏显示。

set(fig, 'Position', get(0,'Screensize'));

请注意,如果先使图形全屏,然后删除菜单栏和工具栏,图形将不会全屏,因此请确保以正确的顺序运行它们。

于 2020-06-24T14:41:27.523 回答