Python
 Computer >> コンピューター >  >> プログラミング >> Python

Matplotlibで作成したPDFにフォントを埋め込む方法

Matplotlibで生成したPDFにフォントを正しく埋め込むには、plt.rcParams['pdf.fonttype'] = 42 を設定します。この設定により、PDF内でTrueTypeフォントが使用され、テキストが編集可能な形で埋め込まれます。

手順

  • 図のサイズを設定し、サブプロット間および周囲のパディング(余白)を調整します。
  • figure() メソッドを使用して、新しい図を作成するか、既存の図を有効化します。
  • numpy を使って xy のデータポイントを生成します。
  • scatter() メソッドで x と y のデータポイントをプロットします。
  • プロットにタイトルを設定します。
  • 図をPDF形式で保存します。

コード例

import numpy as np
from matplotlib import pyplot as plt, font_manager as fm

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
plt.rcParams['pdf.fonttype'] = 42

fig, ax = plt.subplots()
x = np.random.rand(100)
y = np.random.rand(100)

ax.scatter(x, y, c=y, marker="v")

fprop = fm.FontProperties(fname='C:\\Windows\\Fonts\\MISTRAL.TTF')

ax.set_title('Scatter Plot With Random Points',
             fontproperties=fprop, size=20, fontweight="bold")

plt.savefig("demo.pdf")

出力結果

コードを実行すると、プロジェクトディレクトリに「demo.pdf」というファイル名で以下の散布図が保存されます。

Matplotlibで作成したPDFにフォントを埋め込む方法

タイトル部分のフォントスタイルに注目してください。この例では、Mistral フォントを使ってタイトルを表示しています。

補足:fonttype の違いについて

pdf.fonttype の値には主に次の2種類があります。

  • 42(TrueType):フォントが完全に埋め込まれ、PDFビューアや編集ソフトでテキストを選択・コピーできます。出版や論文投稿ではこちらが推奨されることが多いです。
  • 3(Type 3):グリフがアウトライン化されて埋め込まれるため、ファイルサイズは小さくなりますが、テキストとしての編集性は失われます。

特に学術論文の投稿規定では「Type 42(TrueType)でフォントを埋め込むこと」が求められる場合が多いため、用途に応じて適切な値を設定しましょう。

  1. Matplotlibで3D連続線をプロットする方法

    Matplotlibを使って3次元空間に連続的な線(3Dライン)を描画する方法を解説します。基本的な手順は以下の通りです。3Dプロットの手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。NumPyを使用して x と y のデータポイントを作成します。xとyのデータポイントから z のデータポイントを計算して作成します。figure() メソッドを使って、新しい図を作成するか既存の図をアクティブにします。add_subplot() メソッドに3D投影(projection=3d)を指定して、Axesを追加します。plot() メソッドを使って、x、y、zのデータポ

  2. FlaskでMatplotlibのグラフを表示する方法【サンプルコード付き】

    Webアプリケーション上でグラフを動的に表示したい場合、FlaskとMatplotlibを組み合わせるのが効果的です。この記事では、Flaskアプリケーション内でMatplotlibのプロットをPNG画像としてブラウザに返す方法を、具体的な手順とサンプルコードとともにわかりやすく解説します。 実装の流れ FlaskでMatplotlibのグラフを表示するまでの基本的な手順は以下の通りです。 小さなFlaskアプリケーションを作成する カレントディレクトリに移動し、環境変数を設定してアプリを起動する$ export FLASK_APP=file.py$ flask run ブラウザで http