Notiz
Klicken Sie hier , um den vollständigen Beispielcode herunterzuladen
Textwiedergabe mit XeLaTeX/LuaLaTeX über das pgf
Backend #
Über das pgf
Backend kann Matplotlib Figuren als pgf-Zeichnungsbefehle exportieren, die mit pdflatex, xelatex oder lualatex verarbeitet werden können. XeLaTeX und LuaLaTeX verfügen über volle Unicode-Unterstützung und können jede Schriftart verwenden, die im Betriebssystem installiert ist, wobei erweiterte typografische Funktionen von OpenType, AAT und Graphite verwendet werden. Pgf-Bilder, die mit erstellt wurden, plt.savefig('figure.pgf')
können als Rohbefehle in LaTeX-Dokumente eingebettet werden. plt.savefig('figure.pdf')
Durch Umschalten des Backends können Zahlen auch direkt zusammengestellt und als PDF gespeichert werden
matplotlib.use('pgf')
oder indem Sie explizit die Nutzung des pgf
Backends anfordern
plt.savefig('figure.pdf', backend='pgf')
oder indem Sie es für die Verarbeitung von PDF-Ausgaben registrieren
from matplotlib.backends.backend_pgf import FigureCanvasPgf
matplotlib.backend_bases.register_backend('pdf', FigureCanvasPgf)
Die letzte Methode ermöglicht es Ihnen, weiterhin normale interaktive Backends zu verwenden und xelatex-, lualatex- oder pdflatex-kompilierte PDF-Dateien von der grafischen Benutzeroberfläche aus zu speichern.
Die pgf-Unterstützung von Matplotlib erfordert eine aktuelle LaTeX - Installation, die die TikZ/PGF-Pakete (wie TeXLive ) enthält, vorzugsweise mit installiertem XeLaTeX oder LuaLaTeX. Wenn entweder pdftocairo oder Ghostscript auf Ihrem System vorhanden ist, können Zahlen optional auch als PNG-Bilder gespeichert werden. Die ausführbaren Dateien für alle Anwendungen müssen sich auf Ihrem befindenPATH
.
rcParams
die das Verhalten des pgf-Backends steuern:
Parameter
Dokumentation
pgf.präambel
Zeilen, die in die LaTeX-Präambel aufgenommen werden sollen
pgf.rcfonts
Richten Sie Schriftarten von rc params unter Verwendung des Fontspec-Pakets ein
pgf.textsystem
Entweder „xelatex“ (Standard), „lualatex“ oder „pdflatex“
Notiz
TeX definiert eine Reihe von Sonderzeichen, wie zum Beispiel:
# $ % & ~ _ ^ \ { }
Im Allgemeinen müssen diese Zeichen korrekt maskiert werden. Der Einfachheit halber werden einige Zeichen (_, ^, %) außerhalb von mathematischen Umgebungen automatisch maskiert. Andere Zeichen werden nicht maskiert, da sie normalerweise in tatsächlichen TeX-Ausdrücken benötigt werden. Man kann TeX jedoch so konfigurieren, dass es sie als "normale" Zeichen behandelt (in TeX als "catcode 12" bekannt) über eine benutzerdefinierte Präambel, wie zum Beispiel:
plt.rcParams["pgf.preamble"] = (
r"\AtBeginDocument{\catcode`\&=12\catcode`\#=12}")
Mehrseitige PDF-Dateien #
Das pgf-Backend unterstützt auch mehrseitige PDF-Dateien mit
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)
Schriftartspezifikation #
Die Schriftarten, die zum Erhalten der Größe von Textelementen oder zum Zusammenstellen von Abbildungen in PDF verwendet werden, sind normalerweise in der definiert rcParams
. Sie können auch die LaTeX-Standard-Computer-Modern-Schriftarten verwenden, indem Sie die Listen für rcParams["font.serif"]
(Standard: ),
(Standard: ) oder (Standard: ) löschen. Bitte beachten Sie, dass die Glyphenabdeckung dieser Schriftarten sehr begrenzt ist. Wenn Sie die Computer Modern-Schriftart beibehalten möchten, aber erweiterte Unicode-Unterstützung benötigen, sollten Sie die Installation der
Computer Modern Unicode - Schriftarten CMU Serif , CMU Sans Serif usw. in Betracht ziehen.['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']
Beim Speichern in .pgf
wird die für das Layout der Abbildung verwendete Schriftartkonfiguration Matplotlib in den Header der Textdatei eingefügt.
"""
=========
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)
Benutzerdefinierte Präambel #
Eine vollständige Anpassung ist möglich, indem Sie der Präambel Ihre eigenen Befehle hinzufügen. Verwenden Sie rcParams["pgf.preamble"]
(Standard: ''
), wenn Sie die mathematischen Schriftarten konfigurieren möchten, unicode-math
z. B. mit oder zum Laden zusätzlicher Pakete. Wenn Sie die Schriftartkonfiguration selbst vornehmen möchten, anstatt die in den rc-Parametern angegebenen Schriftarten zu verwenden, stellen Sie außerdem sicher, dass sie deaktiviert sind rcParams["pgf.rcfonts"]
(Standard: 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)
Auswahl des TeX-Systems #
Das von Matplotlib zu verwendende TeX-System wird von ausgewählt rcParams["pgf.texsystem"]
(Standard: 'xelatex'
). Mögliche Werte sind 'xelatex'
(Standard) 'lualatex'
und 'pdflatex'
. Bitte beachten Sie, dass bei der Auswahl von pdflatex die Schriftarten und das Unicode-Handling in der Präambel konfiguriert werden müssen.
"""
=============
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)
Fehlerbehebung #
Bitte beachten Sie, dass die in einigen Linux-Distributionen und MiKTeX-Installationen enthaltenen TeX-Pakete stark veraltet sind. Stellen Sie sicher, dass Sie Ihren Paketkatalog aktualisieren und eine neuere TeX-Distribution aktualisieren oder installieren.
Unter Windows ist die
PATH
Die Umgebungsvariable muss möglicherweise geändert werden, um die Verzeichnisse einzuschließen, die die ausführbaren Dateien latex, dvipng und ghostscript enthalten. Einzelheiten finden Sie unter Umgebungsvariablen und Festlegen von Umgebungsvariablen in Windows .Manchmal ist die Schriftwiedergabe in Grafiken, die als PNG-Bilder gespeichert sind, sehr schlecht. Dies passiert, wenn das pdftocairo-Tool nicht verfügbar ist und Ghostscript für die PDF-zu-PNG-Konvertierung verwendet wird.
Stellen Sie sicher, dass das, was Sie zu tun versuchen, in einem LaTeX-Dokument möglich ist, dass Ihre LaTeX-Syntax gültig ist und dass Sie ggf. rohe Zeichenfolgen verwenden, um unbeabsichtigte Escape-Sequenzen zu vermeiden.
rcParams["pgf.preamble"]
(Standard:''
) bietet viel Flexibilität und viele Möglichkeiten, Probleme zu verursachen. Versuchen Sie bei Problemen, die benutzerdefinierte Präambel zu minimieren oder zu deaktivieren.Das Konfigurieren einer
unicode-math
Umgebung kann etwas schwierig sein. Die TeXLive-Distribution bietet beispielsweise eine Reihe von mathematischen Schriftarten an, die normalerweise nicht systemweit installiert sind. XeTeX kann diese Schriftarten im Gegensatz zu LuaLatex nicht anhand ihres Namens finden, weshalb Sie möglicherweise die Schriftarten angeben müssen,\setmathfont{xits-math.otf}
anstatt sie Ihrem Betriebssystem zur Verfügung zu stellen. Weitere Informationen finden Sie in dieser tex.stackexchange.com-Frage .\setmathfont{XITS Math}
Wenn die von Matplotlib verwendete Schriftartkonfiguration von der Schriftarteinstellung in Ihrem LaTeX-Dokument abweicht, kann die Ausrichtung von Textelementen in importierten Abbildungen deaktiviert sein. Überprüfen Sie den Header Ihrer
.pgf
Datei, wenn Sie sich nicht sicher sind, welche Schriftarten Matplotlib für das Layout verwendet.Vektorbilder und damit
.pgf
Dateien können aufgebläht werden, wenn sich viele Objekte im Diagramm befinden. Dies kann bei der Bildverarbeitung oder sehr großen Streudiagrammen der Fall sein. Im Extremfall kann dies dazu führen, dass TeX der Speicher ausgeht: "TeX-Kapazität überschritten, sorry" Sie können Latex so konfigurieren, dass die verfügbare Speichermenge zum Generieren des.pdf
Bildes erhöht wird, wie auf tex.stackexchange.com beschrieben . Eine andere Möglichkeit wäre, Teile des Diagramms zu "rastern", die Probleme verursachen, entweder mit demrasterized=True
Schlüsselwort oder.set_rasterized(True)
wie in diesem Beispiel .Verschiedene mathematische Schriftarten werden nur dann kompiliert und gerendert, wenn entsprechende Schriftartenpakete geladen sind. Insbesondere wenn
\mathbf{}
griechische Buchstaben verwendet werden, enthält die moderne Standardschriftart des Computers diese möglicherweise nicht, in diesem Fall wird der Buchstabe nicht gerendert. In solchen Szenarien sollte daslmodern
Paket geladen werden.Wenn Sie weiterhin Hilfe benötigen, lesen Sie bitte Hilfe