ノート
完全なサンプルコードをダウンロードするには、ここをクリックしてください
pgf
バックエンド経由の XeLaTeX/LuaLaTeX によるテキスト レンダリング#
バックエンドを使用してpgf
、Matplotlib は、pdflatex、xelatex、または lualatex で処理できる pgf 描画コマンドとして Figure をエクスポートできます。XeLaTeX と LuaLaTeX は Unicode を完全にサポートしており、オペレーティング システムにインストールされている任意のフォントを使用でき、OpenType、AAT、Graphite の高度なタイポグラフィ機能を利用できます。によって作成された PGF 画像はplt.savefig('figure.pgf')
、LaTeX ドキュメントに生のコマンドとして埋め込むことができます。plt.savefig('figure.pdf')
バックエンドを切り替えることで、Figure を直接コンパイルして PDF に保存することもできます
matplotlib.use('pgf')
pgf
または、バックエンドの使用を明示的に要求することによって
plt.savefig('figure.pdf', backend='pgf')
またはpdf出力を処理するために登録することにより
from matplotlib.backends.backend_pgf import FigureCanvasPgf
matplotlib.backend_bases.register_backend('pdf', FigureCanvasPgf)
最後の方法では、通常のインタラクティブなバックエンドを使用し続け、xelatex、lualatex、または pdflatex でコンパイルされた PDF ファイルをグラフィカル ユーザー インターフェイスから保存できます。
Matplotlib の pgf サポートには、TikZ/PGF パッケージ ( TeXLiveなど) を含む最新のLaTeXインストールが必要です。XeLaTeX または LuaLaTeX がインストールされていることが望ましいです。システムに pdftocairo または ghostscript が存在する場合、オプションで Figure を PNG 画像に保存することもできます。すべてのアプリケーションの実行可能ファイルは、PATH
.
rcParams
pgf バックエンドの動作を制御するもの:
パラメータ
ドキュメンテーション
pgf.プリアンブル
LaTeX プリアンブルに含める行
pgf.rcfonts
fontspec パッケージを使用して rc パラメータからフォントをセットアップします
pgf.texsystem
「xelatex」(デフォルト)、「lualatex」または「pdflatex」のいずれか
ノート
TeX では、次のような一連の特殊文字が定義されています。
# $ % & ~ _ ^ \ { }
通常、これらの文字は正しくエスケープする必要があります。便宜上、一部の文字 (_、^、%) は数学環境の外で自動的にエスケープされます。他の文字は、実際の TeX 式で一般的に必要とされるため、エスケープされません。ただし、次のようなカスタムプリアンブルを介して、TeX を「通常の」文字 (TeX では「catcode 12」と呼ばれる) として扱うように構成できます。
plt.rcParams["pgf.preamble"] = (
r"\AtBeginDocument{\catcode`\&=12\catcode`\#=12}")
複数ページの PDF ファイル#
pgf バックエンドは、次を使用して複数ページの pdf ファイルもサポートします。
PdfPages
from matplotlib.backends.backend_pgf import PdfPages
import matplotlib.pyplot as plt
with PdfPages('multipage.pdf', metadata={'author': 'Me'}) as pdf:
fig1, ax1 = plt.subplots()
ax1.plot([1, 5, 3])
pdf.savefig(fig1)
fig2, ax2 = plt.subplots()
ax2.plot([1, 5, 3])
pdf.savefig(fig2)
フォント仕様#
テキスト要素のサイズを取得するため、または図を PDF にコンパイルするときに使用されるフォントは、通常、rcParams
. rcParams["font.serif"]
(デフォルト: )、
(デフォルト: )、または(デフォルト: )のリストをクリアすることで、LaTeX のデフォルトの Computer Modern フォントを使用することもできます。これらのフォントのグリフ カバレッジは非常に限られていることに注意してください。Computer Modern のフォント フェースを保持したいが拡張 Unicode サポートが必要な場合は、
Computer Modern UnicodeフォントCMU Serif、CMU Sans Serifなどのインストールを検討してください。['DejaVu Serif', 'Bitstream Vera Serif', 'Computer Modern Roman', 'New Century Schoolbook', 'Century Schoolbook L', 'Utopia', 'ITC Bookman', 'Bookman', 'Nimbus Roman No9 L', 'Times New Roman', 'Times', 'Palatino', 'Charter', 'serif']
rcParams["font.sans-serif"]
['DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', 'sans-serif']
rcParams["font.monospace"]
['DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Computer Modern Typewriter', 'Andale Mono', 'Nimbus Mono L', 'Courier New', 'Courier', 'Fixed', 'Terminal', 'monospace']
に保存する.pgf
と、図のレイアウトに使用されるフォント構成 Matplotlib がテキスト ファイルのヘッダーに含まれます。
"""
=========
PGF fonts
=========
"""
import matplotlib.pyplot as plt
plt.rcParams.update({
"font.family": "serif",
# Use LaTeX default serif font.
"font.serif": [],
# Use specific cursive fonts.
"font.cursive": ["Comic Neue", "Comic Sans MS"],
})
fig, ax = plt.subplots(figsize=(4.5, 2.5))
ax.plot(range(5))
ax.text(0.5, 3., "serif")
ax.text(0.5, 2., "monospace", family="monospace")
ax.text(2.5, 2., "sans-serif", family="DejaVu Sans") # Use specific sans font.
ax.text(2.5, 1., "comic", family="cursive")
ax.set_xlabel("µ is not $\\mu$")
fig.tight_layout(pad=.5)
カスタム プリアンブル#
独自のコマンドをプリアンブルに追加することで、完全なカスタマイズが可能です。たとえば、または追加のパッケージをロードするために、数学フォントを構成する場合はrcParams["pgf.preamble"]
(デフォルト: ) を使用します。また、rc パラメーターで指定されたフォントを使用する代わりに、自分でフォント構成を行いたい場合は、必ず無効にしてください(デフォルト: )。''
unicode-math
rcParams["pgf.rcfonts"]
True
"""
============
PGF preamble
============
"""
import matplotlib as mpl
mpl.use("pgf")
import matplotlib.pyplot as plt
plt.rcParams.update({
"font.family": "serif", # use serif/main font for text elements
"text.usetex": True, # use inline math for ticks
"pgf.rcfonts": False, # don't setup fonts from rc parameters
"pgf.preamble": "\n".join([
r"\usepackage{url}", # load additional packages
r"\usepackage{unicode-math}", # unicode math setup
r"\setmainfont{DejaVu Serif}", # serif font via preamble
])
})
fig, ax = plt.subplots(figsize=(4.5, 2.5))
ax.plot(range(5))
ax.set_xlabel("unicode text: я, ψ, €, ü")
ax.set_ylabel(r"\url{https://matplotlib.org}")
ax.legend(["unicode math: $λ=∑_i^∞ μ_i^2$"])
fig.tight_layout(pad=.5)
TeX システムの選択#
Matplotlib が使用する TeX システムはrcParams["pgf.texsystem"]
(デフォルト: 'xelatex'
) によって選択されます。可能な値は'xelatex'
(デフォルト)、'lualatex'
および'pdflatex'
です。pdflatex を選択する場合、プリアンブルでフォントと Unicode 処理を構成する必要があることに注意してください。
"""
=============
PGF texsystem
=============
"""
import matplotlib.pyplot as plt
plt.rcParams.update({
"pgf.texsystem": "pdflatex",
"pgf.preamble": "\n".join([
r"\usepackage[utf8x]{inputenc}",
r"\usepackage[T1]{fontenc}",
r"\usepackage{cmbright}",
]),
})
fig, ax = plt.subplots(figsize=(4.5, 2.5))
ax.plot(range(5))
ax.text(0.5, 3., "serif", family="serif")
ax.text(0.5, 2., "monospace", family="monospace")
ax.text(2.5, 2., "sans-serif", family="sans-serif")
ax.set_xlabel(r"µ is not $\mu$")
fig.tight_layout(pad=.5)
トラブルシューティング#
一部の Linux ディストリビューションおよび MiKTeX インストールに含まれる TeX パッケージは大幅に古くなっていることに注意してください。パッケージ カタログを更新し、最新の TeX ディストリビューションをアップグレードまたはインストールしてください。
Windows では、
PATH
環境変数を変更して、latex、dvipng、および Ghostscript 実行可能ファイルを含むディレクトリを含める必要がある場合があります。詳細については、環境変数および Windowsでの環境変数の設定を参照してください。png 画像に保存された図のフォント レンダリングが非常に悪い場合があります。これは、pdftocairo ツールが使用できず、pdf から png への変換にゴーストスクリプトが使用されている場合に発生します。
実行しようとしていることが LaTeX ドキュメントで可能であること、LaTeX 構文が有効であること、および意図しないエスケープ シーケンスを避けるために必要に応じて生の文字列を使用していることを確認してください。
rcParams["pgf.preamble"]
(デフォルト:''
) は多くの柔軟性を提供し、多くの問題を引き起こす方法を提供します。問題が発生した場合は、カスタム プリアンブルを最小化または無効にしてみてください。環境の構成は
unicode-math
少し難しい場合があります。たとえば、TeXLive ディストリビューションは、通常はシステム全体にインストールされない一連の数学フォントを提供します。XeTeX は、LuaLatex とは異なり、これらのフォントを名前で見つけることができないため、OS でフォントを使用できるようにする\setmathfont{xits-math.otf}
代わりに指定する必要がある場合があります。詳細については、この tex.stackexchange.com の質問を参照してください。\setmathfont{XITS Math}
Matplotlib で使用されているフォント構成が LaTeX ドキュメントのフォント設定と異なる場合、インポートされた図のテキスト要素の配置がずれている可能性があります。
.pgf
レイアウトに使用されている Matplotlib のフォントがわからない場合は、ファイルのヘッダーを確認してください。.pgf
グラフに多くのオブジェクトがある場合、ベクター画像とファイルが肥大化する可能性があります。これは、画像処理や非常に大きな散布図の場合に当てはまります。極端な場合、これにより TeX がメモリ不足になる可能性があります。「TeX の容量を超えました。申し訳あり.pdf
ませ ん」rasterized=True
別の方法は、キーワードを使用するか、この例.set_rasterized(True)
のように、グラフの一部を「ラスタライズ」して問題を引き起こすことです。対応するフォント パッケージがロードされている場合にのみ、さまざまな数学フォントがコンパイルおよびレンダリングされます。具体的には、
\mathbf{}
ギリシャ文字を使用する場合、デフォルトのコンピューターのモダン フォントにそれらが含まれていない可能性があり、その場合、文字はレンダリングされません。このようなシナリオでは、lmodern
パッケージをロードする必要があります。それでもヘルプが必要な場合は、ヘルプを参照してください