web-dev-qa-db-ja.com

Matlabの図をPNGとしてエクスポートしますか?

MatlabからPNGにフィギュアを自動的にエクスポートする必要があります。私のフィギュアのサイズは600x200ピクセルです。

hFig = figure(1); 
set(hFig, 'Color', [1 1 1]); % backgroundcolor white
set(hFig, 'Position', [500 500 600 200]) % size 600x200

私は例えば試しました.

print -dpng image.png

ただし、image.pngは600x200ピクセルよりも大きくなります。 「保存」ボタンを使用してFigureウィンドウGUIから手動でFigureをエクスポートすると、うまく機能します。これを自動的に/スクリプトから実行したいと思います。ヒントをありがとう!

12
stefan.at.wpf

また、数字を保存しても画面と同じようには見えないという問題も知っています。

saveasコマンドがありますが、これは機能する可能性がありますが、解像度を変更することもできます。

私が知っている唯一の方法は、次のようにすべての側面を注意深く設定することです。

set(gcf,'PaperUnits','inches','PaperSize',[2,6],'PaperPosition',[0 0 2 6])
print('-dpng','-r100','test')

(つまり、用紙サイズは2x6 "で、100dpiで印刷します。そうしないと余分な境界線ができるため、PaperPositionが重要です。)

15
bdecaf

MATLABからpngプロットを生成するための私の好ましいアプローチは、 MATLABファイル交換 で利用可能なexport_figユーティリティです。

次に例を示します。

set(gcf, 'Position', [100 100 500 500], 'Color', 'w')

x=0:0.01:10;
plot(x, sin(x))
set(gca, 'FontSize', 20, 'FontName', 'Arial')

export_fig 'strip-diff-far-forward.png' -painters -nocrop

これにより、20ピクセルのフォントで500 x500ピクセルのpngが作成されます。内部的にはbdecafの回答と同じようなことをしていると思いますが、すべてがすでに関数にカプセル化されており、他にもたくさんの機能があります。

欠点は、-paintersレンダラー(私が最もよく見えると思います)を使用する場合、ghostscriptをインストールする必要があることです。それを台無しにしたくない場合は、-painters-openglに変更できます。

編集フィギュアサイズを正しく設定するようになりました!

4
Dan Becker

Bdecafの回答に基づく:

set(gcf,'PaperUnits','inches','PaperSize',[600/96,200/96],'PaperPosition',[0 0 600/96 200/96])
print('-dpng','-r96','test')

96は私のシステムのdpiです。これにより、保存関数とまったく同じ出力が得られます。 Windowsの場合、dpiは通常96、場合によっては120です。システムに応じて調整するだけです。ビーマーでは、特にシステムに120 DPIがある場合、DPIがシステムと異なる場合があることに注意してください。 96 DPIは、一般的に、ビーマーにとって非常に安全な選択であると思います。システムのDPI設定を見つけるのに助けが必要な場合はGoogle。この回答はbdecafとFlorianに基づいて99.9%なので、bdecafの回答を正しいものとして選択したままにしておきます。

編集:600 =ピクセル単位の水平方向の画像サイズ、200 =ピクセル単位の垂直方向の画像サイズ

1
stefan.at.wpf

Amro Answerは完全に機能します。図を生成した後、PaperPositionModeautoに設定すると、印刷サイズは画面サイズと同じになります。

set(gcf, 'PaperPositionMode','auto')   
print('-dpng','test.png')
1
Reza

試してみてください:

set(hFig, 'PaperPositionMode','auto')   %# WYSIWYG
print -dpng -r0 image.png               %# at screen resolution

これは、画面に表示されるのと同じサイズの画像を生成するように指示します。

0
Amro