はじめに

科学的な図表は、研究論文、助成金提案書、会議ポスターの視覚的な骨格です。よく作られたプロットは、傾向、不確かさ、そして関係性を、テキストの段落よりもはるかに明確に伝えます。しかし、研究者が統計パッケージから図をエクスポートした瞬間、忠実度、メタデータ、再現性が失われるリスクが急増します。ツール固有のビットマップや独自ベクトルから、普遍的に受け入れられる出版準備済みフォーマットへの変換は、単なる「名前を付けて保存」クリックでは済みません。色の正確さ、フォントのレンダリング、拡張性、長期的なアクセシビリティに影響を与える一連の判断が必要です。本記事では、各判断ポイントを順に解説し、科学的メッセージを保持しつつ、ジャーナルや査読者、アーカイブサービスが苦情なく受け入れられるファイルを作成するための具体的なコマンド、設定、検証手順を提示します。


学術出版におけるベクトル形式の重要性

ベクトルグラフィックは、ピクセルの固定グリッドではなく、形状を数式で表現します。この違いが実務上の二つの利点をもたらします。第一に、ベクトルは無限に拡大でき、72 dpi で描かれた線は 5 mm のラベルでも 24 インチのポスターでも鮮明に表示されます。第二に、ベクトルはテキスト、軸、凡例といった意味的に重要な要素を保持するため、スクリーンリーダーでインデックス付けしたり、後から再スタイリングしたりできます。多くの学術ジャーナルが PDF、EPS、または SVG での図表を求めているため、ワークフローの早い段階でこれらの形式に変換しておくと、ラスタ→ベクトルの再作成という下流の慌ただしさを回避できます。さらに、オープンで文書化された仕様を使用すれば、将来的な陳腐化を防げます。たとえば、今日の SVG は 10 年後でもブラウザやベクトリエディタで読み取れるでしょう。


適切なターゲットフォーマットの選択

フォーマット強み弱み
SVG完全に XML ベースで、任意のテキストエディタで編集可能。Web 互換性に優れ、CSS スタイルをサポート。一部の旧式ジャーナル投稿ポータルが SVG を受け付けない、または PDF/EPS への変換を要求することがある。
PDF(ベクトルのみ)出版社に普遍的に受け入れられ、フォントとカラープロファイルを埋め込め、ページレイアウトを保持。エクスポート後の編集性が限定的。各ページが別個のキャンバスになるため、マルチパネル図では扱いが難しいことがある。
EPS印刷の長年の標準。古典的な LaTeX ワークフローで利用可能。カラースペースの扱いが時代遅れで、ファイルサイズが大きく、埋め込みメタデータのサポートが少ない。

実務では、まず SVG にエクスポートし、出力を検証したうえで、ジャーナルが明示的に PDF または EPS を要求する場合に信頼できるベクトル対応コンバータで変換するのが最も安全です。この二段階プロセスにより、元データを再レンダリングせずにさまざまな掲載先で再利用できるクリーンなソースファイルが得られます。


分析ツールでのソースデータ準備

科学的なプロットの典型的な出所は MATLABPython(Matplotlib、Seaborn、Plotly)R(ggplot2、lattice)Origin、そして Microsoft Excel です。ツールに関わらず、以下の準備手順を踏むことでエクスポートされるベクトルの品質が格段に向上します。

  1. ピクセルではなくインチで図のサイズを設定する。 ベクトルエクスポータは物理寸法を尊重し、印刷時にフォントや線幅が意図したサイズで表示されます。
  2. ベクトル対応フォントを使用する。 Helvetica、Arial、またはジャーナル指定の Times New Roman など、広く入手可能な書体に統一します。システム固有のフォントは変換時に置き換えられる恐れがあります。
  3. 明示的にカラースペースを定義する。 印刷出版なら CMYK、Web 重視なら sRGB を使用します。多くのツールはデフォルトで sRGB ですが、カラー・プロファイル設定で上書きできます。
  4. マーカーや線のアンチエイリアスをオフにする。 一部のライブラリは SVG エクスポート時に細線をぼかすため、アンチエイリアスを無効にするとジオメトリがよりクリアになります。
  5. プロット背後のデータをエクスポートする。 データセットを CSV 又は JSON として図と一緒に保存しておくことは、再現性や査読者からの生データ要求に必須です。

Matplotlib の具体例:

import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Helvetica'
plt.rcParams['svg.fonttype'] = 'none'   # テキストをパスに変換せず、文字情報のまま保持
fig, ax = plt.subplots(figsize=(6, 4))
ax.plot(x, y, linewidth=1.2, color='#0072B2')
fig.savefig('figure.svg', format='svg', dpi=300)

svg.fonttype = 'none' フラグは、後から編集できるテキストを保持するための重要な設定です。


フォント、記号、グリフの保持

ベクトルファイルを別のマシンで開くと、欠損フォントが汎用フォントに置き換えられ、レイアウトが崩れることがあります。これを防ぐために、対象フォーマットが許す限りフォントを埋め込む(PDF と EPS は埋め込み対応、SVG は @font-face で参照、もしくは Base64 データで埋め込む)ことが重要です。多くの最新エクスポーターには「フォント埋め込み」のチェックボックスがあります。見当たらない場合は、InkscapeGhostscript で手動埋め込みしてください。

記号(数式記号、ギリシャ文字、カスタムマーカー)も問題の温床です。たとえば R の ggplot2 では、geom_text()Unicode 文字を直接指定すれば、SVG エクスポート時に形状へ変換されずテキストとして残ります。MATLAB の場合は exportgraphics'ContentType','vector' を指定すれば記号はベクトルパスとして保存されますが、ジャーナルが検索可能テキストを求めるなら MathMLTeX エンコーディングを適切に設定する必要があります。


カラープロファイルと一貫性の管理

色忠実度は、生物学(染色強度)や材料科学(相コントラスト画像)などの分野で極めて重要です。次の二点に留意してください。

  1. カラースペース選択 – 印刷向けジャーナルは CMYK、デジタル専用は sRGB を選択します。Adobe Illustrator のように保存前に色モードを切り替えられるツールもありますし、プログラム的には cairosvg--color-profile オプションを受け取ります。
  2. ICC プロファイル埋め込み – International Colour Consortium(ICC)プロファイルは、異なるデバイス間で色の解釈方法を記述します。SVG では <metadata> タグに、PDF ではカラー・スペース辞書に埋め込みます。コマンドラインツールで変換する際は次のようにプロファイルを付加できます。
cairosvg input.svg -o output.pdf --output-profile path/to/ISOcoated_v2_icc.icc

プロファイルを埋め込むことで、査読者の PDF ビューアが意図した色で表示してくれます。


拡張性の確保:ベクトル要素とラスタ要素の管理

名目上ベクトルファイルでも、背景写真やヒートマップ、ビットマップロゴなどのラスタ画像が混入することがあります。これらは拡大するとピクセル化してしまいます。目安は 最終印刷サイズで 300 ppi 以下のラスタ画像は使用しない ことです。ラスタ画像が不可欠な場合は、JPEG ではなく 無劣化 PNG を埋め込み、必要解像度の PNG ソースを提供してください。

データポイントが多数ある散布図(数千点)では、エクスポーターが自動的にマーカーをラスタ化してファイルサイズを抑えることがあります。この動作を抑えるには、プロットライブラリでマーカー描画モードを「ベクトル」に明示的に設定します。Matplotlib では path.simplify=False が複雑なマーカーをラスタブロブに変換しないようにします。


証明性とアクセシビリティのためのメタデータ埋め込み

メタデータは科学的整合性を支える見えないガーディアンです。適切に文書化された図は次の情報を含みます。

  • タイトルとキャプション – 可視化データの簡潔な説明。
  • 著者と所属 – クレジットに必須。
  • 作成日とソフトウェアバージョン – 同一環境での再現を可能に。
  • データソース参照 – DOI もしくは URL。

SVG では <metadata> 要素に RDF や Dublin Core ボキャブラリを用いて記述できます。PDF では Document Information Dictionary/Title/Author、カスタム /Keywords などのフィールドが用意されています。コマンドラインからは exiftoolpdfinfo でメタデータの注入・確認が可能です。

exiftool -Title="Species X の成長曲線" -Author="A. Researcher" -CreatorTool="Matplotlib 3.8" figure.svg

証拠データを埋め込むことで、ジャーナル要件を満たすだけでなく、将来の読者やデータマイニングツールにとっても有益です。


注釈・凡例・軸ラベルの取扱い

注釈はテキスト、形状、矢印などが混在するため最も壊れやすい部分です。保全するコツは次の通りです。

  • エクスポート前に 関連オブジェクトをグループ化 する。グループ化された凡例は SVG の階層内で単一の論理単位として保持されます。
  • ビットマップのスクリーンショットは使用しない。ベクトルプリミティブで再作成します。
  • レイヤーを活用(Adobe Illustrator や Inkscape など)し、メインデータと説明テキストを分離します。後からファイルを開いた際にレイヤーを切り替えて素早く編集できます。

マルチパネル図を変換する場合は、各パネルが同一のフォントサイズと線幅を保つようにします。エクスポーターがパネルごとに独立してリスケールすると、軸がずれることがあります。まず全体を単一キャンバスとしてエクスポートし、ベクトリエディタで正確な寸法を保ちつつパネルに分割してください。


主要なプロット環境向けエクスポート設定

以下は最も一般的な環境で推奨されるエクスポートコマンドです。

MATLAB

set(gcf,'PaperUnits','inches','PaperPosition',[0 0 6 4]);
print(gcf,'-depsc2','-r300','figure.eps');   % フォント埋め込み付き EPS
exportgraphics(gcf,'figure.pdf','ContentType','vector');

Python(Matplotlib)

import matplotlib.pyplot as plt
plt.rcParams['svg.fonttype'] = 'none'   # テキストを編集可能なまま保持
fig.savefig('figure.svg', format='svg')

R(ggplot2)

ggsave('figure.pdf', width=6, height=4, units='in', device=cairo_pdf)
# フォント埋め込み付き SVG の場合
ggsave('figure.svg', width=6, height=4, units='in')

OriginLabFile → Export Graph → Vector を選び、SVG もしくは PDF を指定。Embed fonts オプションにチェックし、適切なカラースペースを選択します。

Microsoft Excel – チャートを右クリック → Save as PictureSVG(Office 365 で利用可能)を選択。その後 Inkscape で開き、フォント埋め込みやカラープロファイル調整を行います。


変換後の検証

変換が完了したら、ジャーナルへ送付する前に必ず次のチェックを行ってください。

  1. 100 % と 200 % のズームで目視検査し、線が鮮明で文字が読みやすいか確認。
  2. **ビットマッププレビュー(300 dpi の PNG)**をエクスポートし、元のプロットと並べて微細な色変化がないか比較。
  3. **チェックサム(例:SHA‑256)**を最終ファイルに計算し、原稿と一緒に保管。レビュー時の不変参照となります。
  4. 複数のビューアでテスト – Adobe Acrobat、Inkscape、Web ブラウザ。フォント欠損やカラープロファイル問題がないか確認。
  5. メタデータの検証exiftool -a -G1 -s(SVG/PNG)または pdfinfo(PDF)で情報が正しく埋め込まれているか確認。

問題が見つかった場合はエクスポート設定を見直すか、ベクトルエディタで対象要素を微調整します。たとえば、互換性の問題が起きたテキスト要素だけをアウトライン化し、残りは編集可能なままにするなど、全体の編集性を損なわずに対応できることが多いです。


大量の図セット向けバッチ変換の自動化

研究プロジェクトでは数十枚のプロットが生成されることが珍しくありません。手作業のエクスポートはすぐにボトルネックになります。以下はスクリプト言語とコマンドラインコンバータを組み合わせた自動化例です。

  • Python + cairosvg – SVG ディレクトリを PDF に一括変換:
import pathlib, subprocess
for svg in pathlib.Path('figs/').glob('*.svg'):
    pdf = svg.with_suffix('.pdf')
    subprocess.run(['cairosvg', str(svg), '-o', str(pdf)])
  • Shell + Ghostscript – PDF を ICC プロファイル埋め込み付き EPS にバッチ変換:
for f in *.pdf; do
  gs -dNOPAUSE -dBATCH -sDEVICE=eps2write \
     -sOutputFile="${f%.pdf}.eps" -sICCProfile=ISOcoated_v2.icc "$f"
done
  • Node.js + SVGO – アーカイブ前に不要メタデータを除去して SVG を最適化:
const SVGO = require('svgo');
const fs = require('fs');
const svgo = new SVGO();

fs.readdirSync('raw/').forEach(file => {
  if (file.endsWith('.svg')) {
    const data = fs.readFileSync(`raw/${file}`, 'utf8');
    svgo.optimize(data, {path: file}).then(res => {
      fs.writeFileSync(`opt/${file}`, res.data);
    });
  }
});

すぐに変換したいだけでツールチェーンを導入したくない場合は、convertise.app のようなブラウザ上で動作するサービスを利用すれば、個別ファイルをサーバーに残すことなく変換できます。


よくある落とし穴と予防策

落とし穴症状予防策
テキストをアウトライン化してしまうテキストが検索不可になり、フォント情報が失われる。フォント埋め込み を有効にし、Matplotlib では svg.fonttype='none' を設定。
カラープロファイルが欠如デバイス間で色がくすんだり変化したりする。エクスポート時に ICC プロファイルを明示的に埋め込む。
ベクトルレイヤーがラスタ化ファイルサイズ増大、拡大時にスケーラビリティ喪失。「エクスポート時にラスタライズ」オプションをオフにし、マーカーはベクトル指定。
埋め込まれたラスタ画像の DPI が不足印刷時に画像がぼやける。ラスタ画像は最終印刷サイズで 300 ppi 以上を確保し、JPEG ではなく無劣化 PNG を使用。
パネル間で線幅が不一致マルチパネル図で視覚的にバランスが崩れる。スクリプト内で全体の linewidth をグローバル変数として定義し、一括適用。

これらの問題を事前に予見し、ワークフローにチェックポイントとして組み込むことで、論文提出直前の慌ただしい修正作業を大幅に削減できます。


図の保存と将来への備え

長期保存には、選択したフォーマットが何十年先でも読めることが求められます。SVGPDF/A が最も将来性の高い選択肢です。最終的な図が完成したら、次の項目を記載した README を作成しましょう。

  • ソフトウェアバージョン(例:matplotlib 3.8.0
  • 使用 OS
  • 正確なエクスポートコマンドライン
  • 使用した ICC プロファイルのパス
  • 図ファイルの SHA‑256 チェックサム

この README と図本体、元データを Git などのバージョン管理リポジトリ、あるいは ZENODO といった信頼できるデジタルアーカイブにまとめて保存します。こうした実践により、再現性要件を満たすだけでなく、ジャーナルがフォーマット変更を求めた際にも容易に再生成できるようになります。


結論

科学的なチャートを出版準備済みのベクトルファイルに変換することは、美観、技術仕様、再現性のバランスを取る disciplined なプロセスです。図サイズの標準化、適切なフォント選択、カラープロファイル管理、証拠メタデータの埋め込み、そして最終出力の検証を体系化すれば、ピアレビューや長期アーカイブの厳しい審査を問題なく通過できます。自動化ツールや軽量ウェブサービス(例:convertise.app)を活用すれば手作業の手間を削減でき、分析に集中できる環境が整います。これらのベストプラクティスを身につければ、作成したすべての図が生成元データと同等に頑丈で再利用可能な資産となります。