hgsaveだけじゃない!Octaveでグラフを多様な形式で保存する alternatives
hgsave
の主な機能は以下の通りです。
-
MATLAB®との互換性を考慮した保存:
hgsave(..., '-v6')
: MATLAB® 7より前のバージョンでロードできる形式で.fig
ファイルを保存します。hgsave(..., '-v7.3')
: MATLAB®バージョン7.3以降でしかロードできない形式で.fig
ファイルを保存します。この形式はHDF5ファイルに基づき、2GBを超える.fig
ファイルを保存するために設計されています。
-
特定のグラフィックスオブジェクトを保存:
hgsave(h, filename)
: ハンドルh
で指定されたグラフィックスオブジェクト(複数可)を、filename
に保存します。h
は、保存したい図や軸、ラインなどのオブジェクトのハンドルを示す配列です。
-
現在の図(Figure)を保存:
hgsave(filename)
: 現在アクティブな図(Figure)を、指定されたfilename
に保存します。filename
は文字列または文字ベクトルで指定します。拡張子を指定しない場合、.fig
が自動的に追加されます。
hgsave
に関する一般的なエラーとトラブルシューティング
-
- エラーメッセージの例:
error: save: permission denied for file 'figure.fig'
- 原因: 指定されたディレクトリにファイルを書き込む権限がない場合に発生します。
- トラブルシューティング:
- ファイルを保存するディレクトリが書き込み可能であることを確認してください。
- 別のディレクトリ(例: ユーザーのホームディレクトリやデスクトップ)に保存を試してください。
- 管理者権限(Windowsでは「管理者として実行」、Linux/macOSでは
sudo
)でOctaveを実行する必要がある場合がありますが、通常は推奨されません。
- エラーメッセージの例:
-
ファイルパスの指定間違い (Invalid File Path)
- エラーメッセージの例:
error: invalid file name or path
- 原因: ファイル名またはパスに無効な文字が含まれている、または存在しないパスを指定している場合に発生します。
- トラブルシューティング:
- ファイル名に特殊文字(
\
、/
、:
、*
、?
、"
、<
、>
、|
など)が含まれていないか確認してください。 - フルパスで指定している場合、そのパスが実際に存在することを確認してください。
- Windowsの場合、パスの区切り文字に
\
ではなく/
を使用するか、\\
のようにエスケープすることを検討してください。
- ファイル名に特殊文字(
- エラーメッセージの例:
-
グラフィックスオブジェクトのハンドルが無効 (Invalid Handle)
- エラーメッセージの例:
error: hgsave: invalid handle
- 原因:
hgsave(h, filename)
のようにハンドルを指定した場合、h
が有効なグラフィックスオブジェクトのハンドルでない場合に発生します。例えば、閉じてしまった図のハンドルを使用している、または存在しないハンドルを指定しているなどです。 - トラブルシューティング:
figure
関数などを使って、実際に図が生成されていることを確認してください。h = figure;
のようにハンドルを変数に格納し、その変数を使用して保存するようにしてください。findall(0, 'type', 'figure')
などで現在開いている図のハンドルを確認できます。
- エラーメッセージの例:
-
ファイルサイズが大きすぎる (File Too Large)
- 原因: 非常に複雑なプロットや多数のデータ点を持つプロットを保存しようとすると、生成される
.fig
ファイルが非常に大きくなり、保存に問題が生じる場合があります。特にMATLAB® 7.3より前の形式で保存しようとする場合に発生しやすいです。 - トラブルシューティング:
hgsave(..., '-v7.3')
オプションを使用して、HDF5ベースの新しい形式で保存することを試してください。これにより、2GBを超えるファイルも扱えるようになります。- プロットの複雑さを減らすことを検討してください(例: データ点を間引く、透明度や複雑なオブジェクトの使用を控える)。
savefig
関数を使用し、さらに'compact'
オプションを試すことも有効です(MATLAB®のsavefig
にも同様のオプションがあります)。これにより、MATLAB®の古いバージョンとの互換性レイヤーが削除され、ファイルサイズが劇的に小さくなることがあります。
- 原因: 非常に複雑なプロットや多数のデータ点を持つプロットを保存しようとすると、生成される
-
Octaveのバグまたは非互換性 (Octave Bug/Incompatibility)
- 原因: 特定のOctaveのバージョンや、使用しているグラフィックツールキット(FLTK, Gnuplot, Qtなど)との組み合わせで、
hgsave
が期待通りに動作しないバグが存在する可能性があります。特に、複雑なプロット要素(透明度、特定のフォント、カスタムUicontrolなど)を含む場合に顕著です。 - トラブルシューティング:
- Octaveのバージョンを最新にアップデートしてみてください。
graphics_toolkit
を変更して保存を試してみてください(例:graphics_toolkit('gnuplot')
やgraphics_toolkit('fltk')
)。ただし、これは表示だけでなく保存される図の見た目にも影響を与える可能性があります。hgsave
の代わりにsavefig
を使用することを強く推奨します。hgsave
は将来のバージョンで削除される予定であり、savefig
がより堅牢な代替手段です。savefig
は基本的にhgsave
と同じ引数と構文をサポートしています。- 問題が解決しない場合は、Octaveのバグ報告システムで同様の問題が報告されていないか確認するか、新規に報告することを検討してください。
- 原因: 特定のOctaveのバージョンや、使用しているグラフィックツールキット(FLTK, Gnuplot, Qtなど)との組み合わせで、
savefig
の使用を推奨する理由
- 機能性:
savefig
はhgsave
と同等の機能を提供し、ファイルサイズを削減するための'compact'
オプションなど、より新しいオプションもサポートしています。 - 互換性:
savefig
はMATLAB® R2014b以降と互換性のある.fig
ファイルを保存します。 - 将来性:
hgsave
は非推奨であり、将来のOctaveバージョンで削除される予定です。savefig
を使用することで、コードの将来の互換性を確保できます。
% 現在の図を保存
plot(1:10);
savefig('my_plot.fig');
% 特定の図を保存
h = figure;
plot(rand(5));
savefig(h, 'random_plot.fig');
% よりコンパクトな形式で保存(MATLAB® R2014b以前との互換性なし)
h = figure;
plot(sin(0:0.1:10));
savefig(h, 'sine_plot_compact.fig', 'compact');
注記: Octaveではhgsave
は非推奨となり、代わりにsavefig
を使用することが推奨されています。しかし、hgsave
の動作を理解するために、ここで例を挙げます。ほとんどの場合、hgsave
をsavefig
に置き換えても同様に動作します。
例1: 現在アクティブな図を保存する
最も基本的な使用法です。hgsave
が呼び出された時点で、現在フォーカスされている(または最後に作成された)図が保存されます。
% 1. 図を作成
figure(1); % 図1を作成し、アクティブにする
plot(1:10, (1:10).^2, 'b-o');
title('二乗関数');
xlabel('x');
ylabel('y');
grid on;
% 2. 現在の図をファイルに保存
% 拡張子を省略すると、自動的に '.fig' が追加されます。
hgsave('my_first_plot');
disp('現在の図が "my_first_plot.fig" として保存されました。');
% 3. 別の図を作成し、異なる名前で保存
figure(2); % 図2を作成し、アクティブにする
x = linspace(0, 2*pi, 100);
plot(x, sin(x), 'r--');
title('サイン関数');
xlabel('角度');
ylabel('値');
grid on;
hgsave('sine_wave_plot.fig'); % 拡張子を明示的に指定することもできます
disp('現在の図が "sine_wave_plot.fig" として保存されました。');
説明:
hgsave('filename')
は、その時点でアクティブな図をfilename.fig
として保存します。figure(1)
やfigure(2)
は、新しい図ウィンドウを作成し、それをアクティブにします。
例2: 特定の図(ハンドルで指定)を保存する
複数の図が開いている場合や、特定の図を明示的に保存したい場合に便利です。
% 1. 複数の図を作成し、それぞれのハンドルを取得
h1 = figure('Name', 'Figure 1 - Cosine');
plot(linspace(0, 2*pi, 100), cos(linspace(0, 2*pi, 100)), 'g-.');
title('コサイン関数');
h2 = figure('Name', 'Figure 2 - Exponential');
plot(1:10, exp(1:10), 'm:');
title('指数関数');
% 3. 図1をファイルに保存 (ハンドル h1 を指定)
hgsave(h1, 'cosine_plot_by_handle.fig');
disp('図1が "cosine_plot_by_handle.fig" として保存されました。');
% 4. 図2をファイルに保存 (ハンドル h2 を指定)
hgsave(h2, 'exponential_plot_by_handle.fig');
disp('図2が "exponential_plot_by_handle.fig" として保存されました。');
説明:
hgsave(h, 'filename')
の形式で、特定のハンドルh
を持つ図を保存します。h1 = figure(...)
のように、figure
関数が返す値を変数に格納することで、その図のハンドルを取得できます。
例3: 特定のバージョン形式で保存する
hgsave
は、MATLAB®の特定のバージョンとの互換性を保つためのオプションを提供します。
% 図を作成
figure;
plot(rand(5));
title('ランダムデータ');
% MATLAB® 7.3以降の形式で保存 (HDF5ベース、大きなファイルに対応)
hgsave('random_data_v7_3.fig', '-v7.3');
disp('図が "random_data_v7_3.fig" (v7.3形式) として保存されました。');
% MATLAB® 7より前のバージョンでロードできる形式で保存
% hgsave('random_data_v6.fig', '-v6');
% disp('図が "random_data_v6.fig" (v6形式) として保存されました。');
% 注: '-v6'はOctaveのバージョンによってはサポートされていない場合があります。
% 現代のMATLAB®は通常v7.3形式を推奨するため、v6形式の必要性は低いです。
説明:
-v6
: MATLAB® 7より前のバージョンと互換性のある形式で保存します。-v7.3
: MATLAB® R2007b以降(またはR2014b以降で推奨される)のHDF5ベースのファイル形式で保存します。これにより、2GBを超えるファイルも保存できるようになります。
例4: 複数のグラフィックスオブジェクトを保存する
これは少し特殊な使い方で、図全体ではなく、特定の軸やラインオブジェクトのみを保存するものです。ただし、.fig
ファイルは通常、図全体をロードすることを想定しているため、この用途は限定的です。
% 図を作成し、プロット
h_fig = figure;
h_ax = axes('Parent', h_fig); % 明示的に軸を作成
h_line = plot(h_ax, 1:10, (1:10).*2, 'k-*');
title(h_ax, '特定のオブジェクトを保存する例');
% 図全体を保存
hgsave(h_fig, 'entire_figure.fig');
disp('図全体が "entire_figure.fig" として保存されました。');
% 軸オブジェクトのみを保存しようとする例 (推奨されないが、文法的には可能)
% hgsave(h_ax, 'only_axes.fig');
% disp('軸オブジェクトのみが "only_axes.fig" として保存されました。');
% 注: このファイルをMATLAB®/Octaveで開いても、期待通りの表示にならないことが多いです。
% '.fig'ファイルは通常、完全な図の階層構造を期待します。
説明:
hgsave
は技術的には任意のグラフィックスオブジェクトのハンドルを受け取ることができますが、.fig
ファイルは図全体を保存し、ロードすることを意図しています。特定のサブオブジェクトのみを保存しても、.fig
ファイルをロードした際にそのサブオブジェクトが単独で意味をなすことは稀です。h_fig
は図のハンドル、h_ax
は軸のハンドル、h_line
はラインオブジェクトのハンドルです。
前述の通り、hgsave
の代わりにsavefig
を使用することを強く推奨します。savefig
はほぼ同じ引数と構文を使用できます。
% 1. 図を作成
figure(1);
plot(1:10, log(1:10), 'g-');
title('対数関数');
xlabel('X');
ylabel('Log(X)');
grid on;
% 2. 現在の図をファイルに保存 (savefigを使用)
savefig('my_log_plot.fig');
disp('現在の図が "my_log_plot.fig" として保存されました (savefig使用)。');
% 3. 特定の図を保存 (savefigを使用)
h_new_fig = figure('Name', '新しく作成した図');
bar(rand(1, 5));
title('棒グラフ');
savefig(h_new_fig, 'bar_chart.fig');
disp('棒グラフが "bar_chart.fig" として保存されました (savefig使用)。');
% 4. コンパクト形式で保存 (savefigの追加機能)
% この形式はMATLAB® R2014b以前との互換性を持ちませんが、ファイルサイズを削減できます。
figure;
surf(peaks(20));
title('3Dサーフェスプロット');
shading interp;
savefig('3d_surface_compact.fig', 'compact');
disp('3Dサーフェスプロットが "3d_surface_compact.fig" (compact形式) として保存されました。');
主な代替方法は以下の通りです。
print
関数: 最も汎用的な方法で、様々な画像フォーマット(PNG, JPEG, PDF, EPS, SVGなど)で保存できます。saveas
関数: MATLAB®互換性のある関数で、print
関数と似ていますが、より高レベルなインターフェースを提供します。- グラフィックスツールキットの選択: Octaveのグラフィックスツールキット(FLTK, Gnuplot, Qt)を変更することで、特定の形式での出力品質や互換性が変わる場合があります。
- プロットデータをファイルに保存: プロット自体ではなく、プロットの元となる数値データを保存し、後で別のツールでプロットすることも可能です。
print関数
print
関数は、Octaveのグラフィックスをビットマップ画像やベクター画像として保存するための非常に強力で柔軟なツールです。
一般的な使用例:
-
特定の図のハンドルを指定して保存:
h_fig = figure; % 図を作成し、ハンドルを取得 plot(rand(5,5), 'o-'); title('ランダムデータ'); % ハンドル `h_fig` で指定された図をPNG形式で保存 print(h_fig, '-dpng', 'random_data_from_handle.png'); disp('特定の図が "random_data_from_handle.png" として保存されました。');
-
JPEG形式で特定の解像度で保存:
% 図を作成 surf(peaks(30)); title('ピーク関数'); % JPEG形式で、解像度300DPIで保存 % `-djpeg` はJPEG形式を指定 % `-r300` は解像度を300DPIに設定 print -djpeg -r300 peaks_300dpi.jpg disp('図が "peaks_300dpi.jpg" として保存されました (300 DPI)。');
-
PDF形式で保存(ベクトル画像):
% 図を作成 x = linspace(0, 4*pi, 200); plot(x, cos(x).^2, 'r--'); title('コサイン二乗関数'); % PDF形式でファイルに保存 % `-dpdf` はPDF形式を指定 print -dpdf cosine_squared.pdf disp('図が "cosine_squared.pdf" として保存されました。');
-
PNG形式で保存:
% 図を作成 plot(1:10, sin(1:10)); title('サイン波'); xlabel('X軸'); ylabel('Y軸'); % PNG形式でファイルに保存 % `-dpng` はPNG形式を指定 % `my_plot.png` は出力ファイル名 print -dpng my_plot.png disp('図が "my_plot.png" として保存されました。');
print
関数の主なオプション:
-painters
,-opengl
: レンダラーを指定します。-cmyk
,-rgb
: カラーモデルを指定します。-tight
: プロットの余白を最小限に抑えます。-bestfit
: ページサイズに合わせてプロットを調整します。-r<dpi>
: 出力解像度をDPI(dots per inch)で指定します(例:-r300
)。ビットマップ画像に影響します。-d<format>
: 出力フォーマットを指定します(例:png
,jpeg
,pdf
,eps
,svg
,tiff
など)。
メリット:
- ベクトル画像形式(PDF, EPS, SVG)で保存することで、拡大しても劣化しない高品質な出力を得られる。
- 解像度やカラーモデルなど、細かな設定が可能。
- 非常に多くのファイル形式に対応している。
デメリット:
.fig
ファイルのように、後でOctave/MATLAB®で開いて編集することはできない(画像ファイルとして保存されるため)。- オプションが多く、慣れるまでに時間がかかる場合がある。
saveas関数
saveas
関数は、MATLAB®との互換性を目的とした関数で、print
関数と似た機能を提供しますが、より直感的な引数構成です。
一般的な使用例:
% 図を作成
figure;
bar(1:5, [10 20 15 25 18]);
title('棒グラフ');
% PNG形式で保存
saveas(gcf, 'bar_chart.png', 'png'); % gcfは現在の図のハンドルを返す
disp('図が "bar_chart.png" として保存されました (saveas使用)。');
% PDF形式で保存
saveas(gcf, 'bar_chart.pdf', 'pdf');
disp('図が "bar_chart.pdf" として保存されました (saveas使用)。');
% JPEG形式で保存
saveas(gcf, 'bar_chart.jpg', 'jpg');
disp('図が "bar_chart.jpg" として保存されました (saveas使用)。');
saveas
関数の構文:
saveas(h, filename, format)
format
: 出力フォーマットを指定する文字列(例:'png'
,'pdf'
,'jpeg'
,'eps'
,'svg'
,'tiff'
,'fig'
など)。filename
: 出力ファイル名。h
: 保存したい図のハンドル(gcf
で現在の図を取得できます)。
メリット:
- MATLAB®との互換性が高い。
print
よりもシンプルな構文。
デメリット:
print
ほど多くのオプション(解像度など)を直接指定できない。
グラフィックスツールキットの選択
Octaveは複数のグラフィックスツールキットをサポートしており、デフォルトのツールキットや、graphics_toolkit
関数で切り替えることができます。ツールキットによって、出力の品質や機能が若干異なる場合があります。
- Qt: よりリッチなGUIを提供します。
- Gnuplot: 外部のGnuplotプログラムを使用します。高品質な出力が可能で、多くのフォーマットをサポートします。
- FLTK: Octaveのデフォルトで、軽量なGUIを提供します。
例えば、print
関数で期待通りの結果が得られない場合に、graphics_toolkit('gnuplot')
を設定してから再度print
を試すと、異なる(場合によってはより良い)結果が得られることがあります。
% 現在のツールキットを確認
graphics_toolkit
% Gnuplotツールキットに切り替える(必要に応じて)
% graphics_toolkit('gnuplot');
% 図を作成し保存
plot(rand(10));
title('Gnuplotツールキットでのテスト');
print -dpdf gnuplot_test.pdf
プロットデータをファイルに保存
これはプロットの「代替」というよりは、プロットの元となるデータを保存する方法です。これにより、後で別の環境(Python, R, Excelなど)や、Octave自体でデータを読み込み、プロットを再生成できます。
-
Octave独自のバイナリ形式(.matファイル)で保存:
% プロットしたいデータ x_vals = linspace(0, 10, 50); y_vals = exp(-0.5 * x_vals) .* cos(2 * pi * x_vals); % .matファイルに保存 save('oscillating_data.mat', 'x_vals', 'y_vals'); disp('プロットデータが "oscillating_data.mat" として保存されました。'); % 後でデータをロードして再プロット % load oscillating_data.mat; % figure; % plot(x_vals, y_vals);
-
テキストファイル(CSVなど)に保存:
% プロットしたいデータ x_data = 1:10; y_data = x_data.^2; % データをマトリックスに結合 data_matrix = [x_data', y_data']; % 列ベクトルに変換して結合 % CSV形式で保存 (カンマ区切り) csvwrite('plot_data.csv', data_matrix); disp('プロットデータが "plot_data.csv" として保存されました。'); % 後でデータをロードして再プロット % loaded_data = csvread('plot_data.csv'); % figure; % plot(loaded_data(:,1), loaded_data(:,2));
メリット:
- 異なるプログラミング言語やソフトウェアでデータを読み込み、柔軟にプロットできる。
- データが失われることなく、完全に再利用可能。
デメリット:
- プロットのスタイルや設定は保存されない。
- 直接的な画像ファイルではないため、すぐに視覚的な結果を確認できない。
これらの代替方法を理解することで、Octaveでグラフィックスを保存する際の選択肢が広がり、特定のニーズに最適な方法を選択できるようになります。通常、学術論文やレポートにはPDFやEPS、ウェブやプレゼンテーションにはPNGやJPEGがよく使われます。
Octaveでグラフィックスを保存する際にhgsave
の代替となる方法はいくつかあります。主な代替手段は以下の通りです。
savefig
関数 (推奨)print
関数saveas
関数- 他の画像処理ライブラリ/ツールとの連携
それぞれについて詳しく説明します。
savefig関数 (推奨される代替手段)
hgsave
はMATLAB®との互換性のために提供されていますが、Octaveの現在のバージョンではsavefig
が推奨されています。savefig
はhgsave
とほぼ同じ構文を持ち、将来にわたってサポートされる機能です。
主な利点:
'compact'
オプションにより、ファイルサイズを削減できる。- MATLAB® R2014b以降との互換性を持つ
.fig
ファイルを生成できる。 - Octaveにおける
.fig
ファイルの保存の標準的な方法。 hgsave
の機能のほとんどをカバーしている。
使用例:
% 図を作成
plot(peaks(25));
title('Peaks関数');
xlabel('X軸');
ylabel('Y軸');
zlabel('Z軸');
colorbar;
% 現在の図を.figファイルとして保存
savefig('my_peaks_plot.fig');
disp('図が "my_peaks_plot.fig" として保存されました (savefig使用)。');
% 特定の図を保存
h_fig = figure;
x = 0:0.1:2*pi;
plot(x, sin(x), 'r--', x, cos(x), 'b:');
title('サインとコサイン');
legend('sin(x)', 'cos(x)');
savefig(h_fig, 'sin_cos_plot.fig');
disp('図が "sin_cos_plot.fig" として保存されました (savefig使用)。');
% コンパクト形式で保存 (ファイルサイズ削減)
savefig('my_compact_plot.fig', 'compact');
disp('図が "my_compact_plot.fig" (コンパクト形式) として保存されました (savefig使用)。');
print
関数は、Octaveでグラフィックスをさまざまな画像形式(PNG, JPEG, PDF, EPSなど)で保存するための最も汎用的な方法です。プリンターへの出力も可能です。MATLAB®のprint
関数と非常に似ています。
主な利点:
- 高品質な画像を生成できるため、出版物やプレゼンテーションに適している。
- 解像度、サイズ、背景色などの詳細なオプションを制御できる。
- 非常に多くの画像/ドキュメント形式に対応している。
使用例:
% 図を作成
figure(3);
plot(rand(1, 10), 'LineWidth', 2);
title('ランダムプロット');
xlabel('インデックス');
ylabel('値');
grid on;
% PNG形式で保存 (デフォルト解像度)
print('random_plot.png');
disp('図が "random_plot.png" (PNG) として保存されました。');
% 高解像度 (300 dpi) のJPEG形式で保存
print('-djpeg', '-r300', 'random_plot_high_res.jpg');
disp('図が "random_plot_high_res.jpg" (JPEG, 300dpi) として保存されました。');
% PDF形式で保存
print('-dpdf', 'random_plot.pdf');
disp('図が "random_plot.pdf" (PDF) として保存されました。');
% Encapsulated PostScript (EPS) 形式で保存 (LaTeXなどで使用)
print('-depsc', 'random_plot.eps'); % カラーEPS
% print('-deps', 'random_plot_mono.eps'); % モノクロEPS
disp('図が "random_plot.eps" (EPS) として保存されました。');
% 特定の図(ハンドルで指定)をPNG形式で保存
h_plot = figure(4);
x = 1:5;
y = [10 15 7 12 9];
bar(x, y);
title('棒グラフ');
print(h_plot, '-dpng', 'bar_chart.png');
disp('棒グラフが "bar_chart.png" (PNG) として保存されました。');
% サイズを指定してPNG形式で保存 (例: 640x480 ピクセル)
print('-dpng', '-S640,480', 'sized_plot.png');
disp('図が "sized_plot.png" (640x480 PNG) として保存されました。');
重要なprint
オプション:
-portrait
,-landscape
: ページの向きを指定します。-color
,-mono
: カラーまたはモノクロ出力を指定します。-S<width>,<height>
: 出力画像のピクセルサイズを指定します(例:-S800,600
)。-f<handle>
: 保存する図のハンドルを指定します。省略すると現在の図。-r<resolution>
: ラスタ形式(PNG, JPEGなど)の解像度をdpiで指定します(例:-r300
)。-r0
はスクリーン解像度。-d<device>
: 出力形式を指定します(例:-dpng
,-djpeg
,-dpdf
,-depsc
)。
saveas
関数もprint
関数と同様に、様々なグラフィックス形式で図を保存するために使用できます。print
関数よりもシンプルな構文を持ちますが、提供されるオプションは少なめです。
主な利点:
- ファイル拡張子から自動的に形式を推測する。
- シンプルな構文で多くの一般的な画像形式に保存できる。
使用例:
% 図を作成
figure(5);
mesh(peaks(30));
title('3Dメッシュプロット');
% ファイル名拡張子から形式を推測してPNGで保存
saveas(gcf, 'my_mesh_plot.png');
disp('図が "my_mesh_plot.png" (PNG) として保存されました (saveas使用)。');
% JPEG形式で保存
saveas(gcf, 'my_mesh_plot.jpg');
disp('図が "my_mesh_plot.jpg" (JPEG) として保存されました (saveas使用)。');
% PDF形式で保存
saveas(gcf, 'my_mesh_plot.pdf');
disp('図が "my_mesh_plot.pdf" (PDF) として保存されました (saveas使用)。');
% 形式を明示的に指定してEPSで保存
saveas(gcf, 'my_mesh_plot.eps', 'eps');
disp('図が "my_mesh_plot.eps" (EPS) として保存されました (saveas使用)。');
説明:
saveas(h, filename, format)
: 形式を明示的に指定できます(例:'png'
,'jpeg'
,'pdf'
,'eps'
)。saveas(h, filename)
: ハンドルh
で指定された図をfilename
に保存します。ファイル拡張子に基づいて形式が決定されます。
これはOctaveの組み込み関数ではありませんが、プロットを保存した後、外部ツールを使ってさらに処理する方法です。
- ImageMagick (
convert
コマンド): 生成されたPNGやJPEGなどの画像を、convert
コマンド(ImageMagickの一部)を使ってさらに編集したり、異なる形式に変換したりできます。Octaveのsystem()
関数を使ってコマンドラインから呼び出すことができます。 - Ghostscript: Octaveの
print
関数は内部でGhostscriptを利用してPDFやPostScriptなどの形式を生成します。Ghostscriptを直接使用して、PostScriptファイルを別の形式に変換することも可能です。
使用例(system
関数との組み合わせ):
% 図を作成し、PNGで保存
figure;
plot(magic(3));
title('魔法陣');
print('-dpng', 'magic_square.png');
disp('図が "magic_square.png" (PNG) として保存されました。');
% ImageMagickのconvertコマンドを使用してJPEGに変換 (背景を白に設定)
% Windowsの場合、'convert'はパスが通っている必要があります。
% Linux/macOSの場合、通常はパスが通っています。
if isunix || ismac
system('convert magic_square.png -background white -flatten magic_square_white_bg.jpg');
disp('PNG画像を背景白のJPEGに変換しました。');
elseif ispc
% Windowsでは "convert" はシステムコマンドと衝突する可能性があるため、
% "magick convert" を使用するか、フルパスを指定することが推奨されます。
% または、"magick" を使う。
% system('magick convert magic_square.png -background white -flatten magic_square_white_bg.jpg');
disp('WindowsでのImageMagick変換コマンドは手動で実行してください。');
end
- 保存後にさらなる画像処理が必要な場合は、
system()
関数を介して外部ツール(Ghostscript, ImageMagickなど)を連携させることもできます。 - よりシンプルな構文で画像形式に保存したい場合は
saveas
が便利です。 - 一般的な画像形式(PNG, JPEG)やドキュメント形式(PDF, EPS)で保存したい場合は、柔軟性と詳細な制御が可能な
print
関数が最も強力です。 .fig
ファイルとして保存し、後でOctave/MATLAB®で編集可能な状態で開きたい場合は、savefig
(または非推奨のhgsave
)を使用します。