2011-08-28 6 views
11

私は2つのプロットを持つ図を持っています。私は図をより長い幅のpngとして保存しようとしています。定義済みのサイズのMatlab保存図

%%%%%%%%%%%%First%%%%%%%%%%%%%%%%%% 
a=figure('Name','First Structure'); 
load C:\Users\William\workspace\P5\FirstAdd.txt 
n=FirstAdd(:,1); 
t=FirstAdd(:,2); 
subplot(1,2,1); 
plot(n,t); 
xlabel('n'); 
ylabel('Time'); 
title('First Structure''s Add'); 
grid on 

load C:\Users\William\workspace\P5\FirstContains.txt 
n=FirstContains(:,1); 
t=FirstContains(:,2); 
subplot(1,2,2); 
plot(n,t); 
xlabel('n'); 
ylabel('Time'); 
title('First Structure''s Contains'); 
grid on 

rect=[250,250,1080,480]; 
set(a, 'OuterPosition',rect); 
print(a,'-dpng','First Structure.png'); 

最後の3行では、2つのプロットが十分に広いようにFigureウィンドウを設定しました。しかし、図を保存しようとすると、画像はプロットが潰れているデフォルトのサイズになります。

私には何が欠けていますか?

+2

[紙の上に正確な寸法でMATLABプロットの印刷]の可能な重複は(http://stackoverflow.com/questions/3600945/printing- a-matlab-plot-in-exact-dimensions-on-paper)、[カスタムサイズの数値をMATLABに保存する方法](http://stackoverflow.com/questions/6508233/how-to-save-custom-sized -figures-in-matlab-closed) – Amro

答えて

12

OuterPositionfigure propertyは、Figureウィンドウが画面上にある場合のみ変更されます。どのように印刷されるかは変わりません。

Matlabはビットマップファイルを作成するときなどに実際に意味をなさない場合でも数字を「印刷する」ときにPaperSize,PaperUnitsPaperPositionなどのFigureプロパティを使用します。 (設定pixelsからPaperUnitsが論理的であろうが、それは動作しない。)

手順画素に特定の画像サイズを取得するためには、インチ(または他の物理的手段)で、いくつかのサイズにPaperPositionを設定することですこれらの特殊性の一部はprintのヘルプで説明されてい

r = 150; % pixels per inch 
set(gcf, 'PaperUnits', 'inches', 'PaperPosition', [0 0 1080 480]/r); 
print(gcf,'-dpng',sprintf('-r%d',r), 'bar.png'); 

:その後、printから-rオプションを使用して、インチあたりのドット数で希望解像度を指定します関数。

-r0オプションを試して、Matlabに表示解像度を使用させることもできます。

4

@のnibotの例に続いて、私は次の関数を書いた:

function save_as_png(handle, filename, dpi, width, height); 
    set(handle, 'PaperUnits', 'inches', 'PaperPosition', [0 0 width height]/dpi); 
    print(handle, '-dpng', ['-r' num2str(dpi)], filename); 
end 
関連する問題