2012-03-07 24 views
8

Làm cách nào để ngăn hiển thị cửa sổ hình trong khi vẫn giữ âm mưu trong nền để lưu bản đồ kết quả vào cuối chạy? Thực hành tốt nhất để làm điều này là gì? Hiện nay, mã của tôi là như thế này:Làm cách nào để chặn hình?

showPlot = 1; % switch to turn plotting on/off 

fig = figure(1); clf; hold on; 
lineHandle = line(nan, nan); 
total = 0; 

for i = 1:10000 
    % long calculation 
    total = total + 1; 
    set(0, 'CurrentFigure', fig); 
    xlim([0, total]); 
    x = [get(lineHandle, 'XData'), total]; 
    y = [get(lineHandle, 'YData'), rand()]; 
    set(lineHandle, 'XData', x, 'YData', y);  
    drawnow; 
end 

% saveas(gcf, file, 'png'); 

tôi muốn thiết lập mã theo cách như vậy mà khi tôi đặt showPlot 0, cửa sổ hình không được hiển thị nhưng cốt truyện sẽ được lưu vào tập tin.

+0

Không có câu trả lời nào phù hợp với tôi! – Nick

Trả lời

16

Để thực hiện các con số hiện tại không nhìn thấy được:

set(gcf,'visible','off') 
+0

'shg' sẽ đưa nó trở lại, ví dụ: nếu bạn muốn vẽ một cốt truyện dữ liệu nặng cùng một lúc thay vì vẽ lại nó mỗi khi bạn thêm một dòng. – CharlieB

12

Từ MathWorks-reference:

Để tránh hiển thị con số trong MATLAB bạn có thể bắt đầu MATLAB bằng cách sử dụng tùy chọn noFigureWindows. Tùy chọn này không có sẵn trên UNIX.

matlab -noFigureWindows 

Là một thay thế, bạn có thể thay đổi các thuộc tính con số mặc định của đối tượng gốc MATLAB:

set(0,'DefaultFigureVisible','off') 

Nếu bạn muốn tạm thời ngăn chặn số liệu mới mà nên accesable sau trong cùng một phiên bạn có thể tiết kiệm hình xử lý:

set(0,'DefaultFigureVisible','off'); 

%create invisible figure 1 
h(1)=figure; 
%create invisible figure 2 
h(2)=figure; 

set(0,'DefaultFigureVisible','on'); 
%show figure 1 
figure(1) 

Nhân tiện, close all đóng tất cả các số đang mở.

+0

Nếu theo đề xuất này, các số liệu được lưu vào một tệp. Nhưng khi tôi nhấp vào chúng, không hiển thị. Nếu tôi gõ hình (1), trở thành có thể nhìn thấy. Làm thế nào tôi có thể tạo các tập tin và lưu trong nền nhưng để lại những con số để hiển thị khi tôi bấm vào chúng? –

1

Các câu trả lời khác không hoạt động đối với tôi trên R2015b trên Ubuntu, cửa sổ hình của tôi sẽ luôn hiển thị.

Tôi đang xử lý hơn 100 tệp và cửa sổ hình bật lên ngăn không cho tôi sử dụng máy tính của mình trong khi xử lý tệp.

Dưới đây là một matlab khắc phục, ra mắt mà không có một màn hình:

matlab -nodesktop -nodisplay 

và điều này sẽ ngăn chặn các cửa sổ hình hiển thị lên. Lập trình lưu con số vào một tập tin vẫn hoạt động.

0

Như đã trả lời trước đó, để ngăn chặn con số hiển thị trong instantiation đầu tiên gọi

set(0, 'DefaultFigureVisible', 'off'); 
% or, if post Matlab R2014b 
set(groot, 'DefaultFigureVisible', 'off'); 

Sau cuộc gọi này, tạo ra các số liệu mới trong một kịch bản sẽ không dẫn đến một cửa sổ có thể nhìn thấy nảy lên.Đương nhiên, con đường để trở lại thiết lập này là

set(0, 'DefaultFigureVisible', 'on'); 
% or, if post Matlab R2014b 
set(groot, 'DefaultFigureVisible', 'on'); 

Các "Gotcha" được rằng kích hoạt một con số hiện tại cho thao tác hơn nữa sẽ kết quả trong một cửa sổ có thể nhìn thấy - nếu được thực hiện không đúng cách:

% suppress visible plot window creation 
set(groot, 'DefaultFigureVisible', 'on'); 
figure(1); % will not result in a visible window 
plot(0:.01:pi,sin(0:.01:pi)); 
hold on 
figure(2); % still no visible window 
plot(0:.01:10,(0:.01:10).^2); 
% so far so good 
% ... other statements ... 
% select figure 1 to add to it: 
figure(1); % visible window appears! 
plot(0:.01:pi,cos(0:.01:pi)); 
hold off; 
% ... 

Các giải pháp khác là sử dụng một lệnh khác đặt để chọn các số liệu hiện có:

set(groot, 'DefaultFigureVisible', 'on'); 
figure(1); % will not result in a visible window 
plot(0:.01:pi,sin(0:.01:pi)); 
hold on 
figure(2); % still no visible window 
plot(0:.01:10,(0:.01:10).^2); 
set(groot, 'CurrentFigure', 1); % still no visible window 
% plot commands will apply to figure 1 
plot(0:.01:pi,cos(0:.01:pi)); 
hold off 
% ... 

Bất kể các thiết lập của 'DefaultFigureVisible', kêu gọi

figure(h); 

trong đó h là một tay cầm hoặc số nguyên cho một cửa sổ cốt truyện hiện gây ra cửa sổ đó để trở nên năng động và nhìn thấy được. Vì vậy, người ta có thể làm cho tất cả các lô có thể nhìn thấy ở dưới cùng của một kịch bản theo cách này:

fh = get(groot, 'Children'); 
for x = 1:numel(fh) 
    figure(fh(x)); 
end 
Các vấn đề liên quan